Apache kafka 具有默认分区的Kafka生产者

Apache kafka 具有默认分区的Kafka生产者,apache-kafka,apache-flink,Apache Kafka,Apache Flink,现在,我的卡夫卡制作人正在将所有消息下沉到一个卡夫卡主题的单个分区中,该分区实际上有多个分区 如何创建使用默认分区器并在主题的不同分区之间分发消息的生产者 我的卡夫卡制作人的代码片段: Properties props = new Properties(); props.put(ProducerConfig.RETRIES_CONFIG, 0); props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG,bootstrap.servers); props

现在,我的卡夫卡制作人正在将所有消息下沉到一个卡夫卡主题的单个分区中,该分区实际上有多个分区

如何创建使用默认分区器并在主题的不同分区之间分发消息的生产者

我的卡夫卡制作人的代码片段:

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)
speStream.addSink(
新FlinkKafkaProducer011(卡夫卡托皮克名称,
新的KeyedSerializationSchemaWrapper(新的SimpleStringSchema()),
道具,
FlinkKafkaProducer011.语义。准确地说(一次)

使用默认分区器,使用以下逻辑为消息分配分区:

  • keyed messages:生成密钥的散列并基于该散列选择分区。这意味着具有相同密钥的消息将在同一分区上结束

  • 未指定消息:循环用于分配分区


解释您看到的行为的一个选项是,如果您对所有消息使用相同的密钥,那么使用默认分区器,它们将最终位于相同的分区上。

通过将flinkproducer更改为


addSink(新的FlinkKafkaProducer011(kafkaTopicName,新的SimpleStringSchema(),props))

我不确定这里的关键部分。我正在使用flink kafka producer接收有关kafka topic.speStream.addSink(新FlinkKafkaProducer011)的消息(kafkaTopicName,new KeyedSerializationSchemaWrapper(new SimpleStringSchema()),props,flinkkapkaproducer011.Semantic.justice_ONCE));FlinkPartitloner与Kafka partitioner不同