使用FlinkCDC监听MySQL binlog获取到MySQL数据后,写入kafka。
flink官网提供sink方式为:
DataStream<String> stream = ...;
KafkaSink<String> sink = KafkaSink.<String>builder()
.setBootstrapServers(brokers)
.setRecordSerializer(KafkaRecordSerializationSchema.builder()
.setTopic("topic-name")
.setValueSerializationSchema(new SimpleStringSchema())
.build()
)
.setDeliveryGuarantee(DeliveryGuarantee.AT_LEAST_ONCE)
.build();
stream.sinkTo(sink);
.setTopic("topic-name"),表示需要手动指定需要写入的 topic 。
当我监听MySQL binlog存在多库多表时,如果将每张表都写入不同的topic,则需要进行表名判断,然后写入对应的topic。
或者,判断后进行分流操作,不同的流写入不同的topic。代码量重复,代码多,也比较麻烦。
那么:有没有方式,不需要手动指定 topic,根据流中的数据来自动判断应该写入对应topic?
解决:自定义kafka序列化器 MyKafkaRecordS