如何将消息发送到 Kafka 中的特定分区?
How to send message to a particular partition in Kafka?
我创建了一个有很多分区的主题。使用控制台生产者,我想将消息发送到特定分区并通过控制台消费者查看。
在控制台制作人上我试过了,
kafka-console-producer.bat --broker-list localhost:9092 --topic sample --property parse.key=true --property key.separator=,
发送消息为,
key1,another-message
但我只是对key1是否代表分区号感到困惑。
我使用控制台消费者查看了消息,
kafka-console-consumer.bat --zookeeper localhost:2181 --topic sample
我想按分区查看消息。这是在控制台消费者上查看消息的正确方法吗?有谁能清楚地了解一下吗?
key不是分区号,Kafka使用key来指定目标分区。默认策略是根据键的散列选择分区,如果键为空,则使用循环算法。
如果您需要自定义算法将消息映射到分区,您需要实现 org.apache.kafka.clients.producer.Partitioner
接口。你的名字class必须设置为制作人partitioner.class
属性
更新:也可以直接在ProducerRecord
中指定分区号
我创建了一个有很多分区的主题。使用控制台生产者,我想将消息发送到特定分区并通过控制台消费者查看。 在控制台制作人上我试过了,
kafka-console-producer.bat --broker-list localhost:9092 --topic sample --property parse.key=true --property key.separator=,
发送消息为,
key1,another-message
但我只是对key1是否代表分区号感到困惑。
我使用控制台消费者查看了消息,
kafka-console-consumer.bat --zookeeper localhost:2181 --topic sample
我想按分区查看消息。这是在控制台消费者上查看消息的正确方法吗?有谁能清楚地了解一下吗?
key不是分区号,Kafka使用key来指定目标分区。默认策略是根据键的散列选择分区,如果键为空,则使用循环算法。
如果您需要自定义算法将消息映射到分区,您需要实现 org.apache.kafka.clients.producer.Partitioner
接口。你的名字class必须设置为制作人partitioner.class
属性
更新:也可以直接在ProducerRecord
中指定分区号