【发布时间】:2020-10-18 18:17:23
【问题描述】:
我们在 Java 中有一个 kafka 生产者-消费者设置(使用 spring-kafka,但这里可能不相关)。使用的键是String,值是自定义 POJO。生产者-消费者通过具有 16 个分区的单个主题 test-topic 进行通信。消费者具有 16 的并发,因此它可以从每个分区并行读取。
从文档和其他参考资料中,我了解到 - 使用null 密钥将以循环方式在分区中分发发布者发送的消息。如果我有兴趣将消息分发到使用键派生的特定分区,建议使用非空键
我在这里有以下疑问-
- 目前,生产者为每条消息发送唯一的密钥。由于这是每条消息唯一的
String,因此在几乎所有情况下,它也会生成唯一的哈希码。消息将如何在这里分发,是像null键这样的循环还是一些重复使用分区或任何其他控制机制的哈希逻辑? - 使用上面提到的策略键而不是
null键有什么优点或缺点吗? - 我不需要维护消息的顺序或分组。在这种情况下,使用
null键是否明智,或者每条消息有一个唯一或非唯一的非空键仍然很好,如果是,为什么? - 消费者正在批量读取消息。有或没有关键影响批量读取与单次读取有什么不同?
【问题讨论】:
标签: java apache-kafka kafka-producer-api