一、KafkaSink
1、按流内容分发到对应topic,隔天自动切换
在flink自带的kafka sink实现里,只支持写到固定topic,而我们的kafka2kafka日志处理逻辑要求消息要按照ds字段值写入到对应topic,topic名前缀相同,后面跟ds字段值,需要进行改造
具体实现思路如下:
(1)由如下源码可知KeyedSerializationSchema对象才能赋值schema,从而可以通过schema.getTargetTopic获得每条对应的topic,而常用的SimpleStringSchema并未继承KeyedSerializationSchema,无法得到对应的topic,只能使用固定topic
FlinkKafkaProducer011
private final KeyedSerializationSchema<IN> schema;
@Override
public void invoke(KafkaTransactionState transaction, IN next, Context context) throws FlinkKafka011Exception {
String targetTopic = schema.getTargetTopic(next);
if (targetTopic == null) {
targetTopic = defaultTopicId;
}
...
}
(2)继承合适的父类进行二次开发