【发布时间】:2018-02-03 21:25:16
【问题描述】:
我有一个分区主题,其中有 X 分区。
到目前为止,在生成消息时,我创建了 Kafka 的 ProducerRecord,仅指定了 topic 和 value。我没有定义key。
据我了解,我的消息将使用默认的内置分区程序在分区之间均匀分布。
另一方面,我有一个 Kafka 消费者线程池。每个 Kafka 消费者都将在其自己的专用线程中运行,以消耗来自主题的消息。这些消费者中的每一个都被赋予相同的group.id。这将允许并行使用消息。每个消费者都将被分配公平份额的分区以供读取。
我希望我的消息以有序的方式被使用。我知道 Kafka 保证分区内消息的顺序。因此,只要我想出一个正确的键结构,我就会以某种方式对我的消息进行分区,以使它们最终位于同一个分区中。在某种程度上,消息键将消息分组并将它们存储在分区中。
有意义吗?
问:是否有可能由于密钥设计不当而导致分区不均匀?一个人可能会收到比其他人更多的记录。它会对我的 Kafka 集群的性能产生不良影响吗?消息密钥设计的最佳实践是什么?
【问题讨论】:
标签: multithreading multiprocessing apache-kafka kafka-consumer-api kafka-producer-api