我有一个分区主题,它有X
分区。在Kafka中设计消息密钥的最佳方式是什么?
截至目前,在生成消息时,我创建了仅指定topic
和value
的卡夫卡ProducerRecord
。我没有定义key
。 据我所知,我的消息将使用默认的内置分区器在分区间均匀分配。 另一方面,我有一个卡夫卡消费者的线程池。每个卡夫卡消费者都将在自己的专用线程中运行消耗该主题的消息。这些消费者中的每一个都被赋予相同的group.id
。这将允许消费并行消息。每个消费者将被分配公平份额的分区来读取。
我希望我的消息有条不紊地被消费。我知道Kafka保证分区内的消息顺序。所以,只要我想出了一个合适的密钥结构,我就可以将我的消息进行分区,以便它们最终位于同一个分区中。在某种程度上,消息密钥将消息分组并存储在分区中。
它有道理吗?
问:是否有机会由于设计错误的密钥而导致分区不均匀?人们可能比其他人获得更多的记录。它是否会影响我的Kafka集群的性能?消息密钥设计的最佳实践是什么?
你已经提到过,消息的顺序可能取决于生产者的配置方式,是否配置失败尝试后重试。是否有Kafka生产者配置参数?或重试策略是必须通过应用程序代码进行思考和实施的吗? –