Apache Flink-Kafka生产者将消息发送到Kafka主题,但位于不同的分区上

时间:2018-08-28 10:51:27

标签: apache-flink

现在,我的flink代码正在处理一个文件,并将数据存储在具有1个分区的kafka主题上。

现在我有一个带有2个分区的主题,我希望flink代码使用DefaultPartitioner在这2个分区上接收数据。

您能帮我吗?

这是我当前代码的代码段:

DataStream<String> speStream = inputStream..map(new MapFunction<Row, String>(){....}
Properties props = Producer.getProducerConfig(propertiesFilePath);
speStream.addSink(new FlinkKafkaProducer011(kafkaTopicName, new KeyedSerializationSchemaWrapper<>(new SimpleStringSchema()), props, FlinkKafkaProducer011.Semantic.EXACTLY_ONCE));

2 个答案:

答案 0 :(得分:0)

通过将flinkproducer更改为

解决了此问题
 speStream.addSink(new FlinkKafkaProducer011(kafkaTopicName,new SimpleStringSchema(), 
 props));

我以前使用的是

speStream.addSink(new FlinkKafkaProducer011(kafkaTopicName,
new KeyedSerializationSchemaWrapper<>(new SimpleStringSchema()), props,
FlinkKafkaProducer011.Semantic.EXACTLY_ONCE));

答案 1 :(得分:0)

Flink版本1.11(我正在使用Java)中,SimpleStringSchema需要一个包装器(即KeyedSerializationSchemaWrapper),@ Ankit也使用该包装器但由于相同原因导致我低于constructor相关错误,因此从建议的解决方案中删除。

FlinkKafkaProducer<String> producer = new FlinkKafkaProducer<String>(
                        topic_name, new KeyedSerializationSchemaWrapper<>(new SimpleStringSchema()), 
                        properties, FlinkKafkaProducer.Semantic.EXACTLY_ONCE);

错误:

The constructor FlinkKafkaProducer<String>(String, SimpleStringSchema, Properties, FlinkKafkaProducer.Semantic) is undefined