现在我的kafka 生产环境 者正在将所有消息下沉到kafka主题的单个分区,该分区实际上有超过1个分区 .
如何创建将使用默认分区程序并在主题的不同分区之间分发消息的 生产环境 者 .
我的kafka制作人的代码片段:
Properties props = new Properties();
props.put(ProducerConfig.RETRIES_CONFIG, 0);
props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG,bootstrap.servers);
props.put(ProducerConfig.ACKS_CONFIG, "all");
我正在使用flink kafka生成器来接收关于kafka主题的消息 .
speStream.addSink(
new FlinkKafkaProducer011(kafkaTopicName,
new KeyedSerializationSchemaWrapper<>(new SimpleStringSchema()),
props,
FlinkKafkaProducer011.Semantic.EXACTLY_ONCE)
2 回答
使用默认分区程序,使用以下逻辑为消息分配一个分区:
键控消息:生成密钥的散列,并基于该分区被选中 . 这意味着具有相同密钥的消息将最终出现在同一分区上
unkeyed messages:循环法用于分配分区
解释您看到的行为的一个选项是,如果您对所有邮件使用相同的密钥,那么使用默认分区程序它们将最终位于同一分区上 .
通过将flinkproducer改为来解决这个问题
speStream.addSink(new FlinkKafkaProducer011(kafkaTopicName,new SimpleStringSchema(),props));