最近做了一个将结果数据写入到Kafka的需求,sink部分代码如下:
val kafkaProducer: FlinkKafkaProducer011[String] = new FlinkKafkaProducer011[String](
sinkTopic, new StringKeyedSerializationSchema,producerConfig, sinkSemantic)
ds.addSink(kafkaProducer).setParallelism(sinkParallelism)
其中StringKeyedSerializationSchema是自定义的实现KeyedSerializationSchema的序列化器,用于序列化写入kafka的key/value, 任务也上线了,在flink web页面看到任务各项指标一切正常,也测试消费写入kafka的数据,得到的结果也如预期一样,想着万事大吉了,so easy~ 过了一会kafka中间件的同事找过来说:你这个写入topic的数据怎么只有这几个分区,其他分区都没有数据写入
什么情况?任务看着一切都ok啊,怎么就有分区没有数据写入呢?马上google一下数据写入kafka的分区策略:
- 如果指定写入分区,就将数据写入分区
- 如果没有指定分区,指定了key, 那么就会按照key hash对分区取模方式发送
- 如