我们有消息层的要求,我们希望保留消息的顺序,直到它被消费者消费为止。我们正在探索卡夫卡的同样目的。我知道 Kafka 不保证跨分区的排序,但在分区内它保持顺序。
我在想,如果我们能够以某种方式确保特定的生产者(具有某些键值属性)在主题 t1 的特定分区 p1 中发布其消息,并且如果我们能够确保消费者从同一分区 p1 获取消息..服务于我们的目的。
在
kafka-console-producer.sh
帮助中,我看到如下:
--producer-property <producer_prop> A mechanism to pass user-defined
properties in the form key=value to
the producer.
--producer.config <config file> Producer config properties file. Note
that [producer-property] takes
precedence over this config.
--property <prop> A mechanism to pass user-defined
properties in the form key=value to
the message reader. This allows
custom configuration for a user-
defined message reader.
我们可以使用这个
--property
选项来控制生产者将写入的分区吗?
同样在高级消费者中,我们可以控制它从哪个分区消费吗? 如何将分区分配给消费者?
Kafka 仅提供分区内消息的总顺序,而不提供主题中不同分区之间的消息总顺序。
如果你有一个单一分区的主题,顺序是有保证的。如果您的消费者表现良好,您不必担心。
假设您至少有 Kafka 0.9,每个消费者在代理上注册时都会被分配一个分区。如果您有一个主题有 2 个分区和两个消费者,则每个主题将分配一个分区。此信息存储在
ConsumerPartitionOwnershipInfo
中,请参阅设计文档了解更多详细信息。主题中的每个分区都恰好分配给消费者组中的一个成员。