@Override public List<SourceRecord> poll() throws InterruptedException { try { MaxwellAbstractRowsEvent event = replicator.getEvent(); this.maxwellContext.ensurePositionThread(); if (event == null) { return null; } if (event.getTable().getDatabase().getName().equals("maxwell")) { return null; } String databaseName = event.getDatabase().getName(); String tableName = event.getTable().getName(); String topicName = databaseName + "." + tableName; ArrayList<SourceRecord> records = new ArrayList<>(); Table table = event.getTable(); List<Row> rows = event.filteredRows(); // databaseName.tableName // create schema for primary key Schema pkSchema = DataConverter.convertPrimaryKeySchema(table); List<Struct> primaryKeys = new ArrayList<Struct>(); for (Row row : rows) { // make primary key schema Struct pkStruct = new Struct(pkSchema); for (String pk : table.getPKList()) { int idx = table.findColumnIndex(pk); Column column = row.getColumns().get(idx); ColumnDef def = table.getColumnList().get(idx); switch (def.getType()) { case "int": IntColumnDef intDef = (IntColumnDef) def; Long l = intDef.toLong(column.getValue()); pkStruct.put(pk, l.intValue()); break; default: throw new RuntimeException("unsupported type"); } } primaryKeys.add(pkStruct); } Iterator<String> jsonIter = event.toJSONStrings().iterator(); // Iterator<String> keysIter = event.getPKStrings().iterator(); Iterator<Struct> pkIter = primaryKeys.iterator(); while (jsonIter.hasNext() && pkIter.hasNext()) { String json = jsonIter.next(); Struct key = pkIter.next(); System.out.print("got a maxwell event!"); System.out.println(json); SourceRecord rec = new SourceRecord( sourcePartition(), sourceOffset(event), topicName, null, // partition pkSchema, key, VALUE_SCHEMA, json); records.add(rec); } return records; // return records; } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; }