我们需要消息层,我们希望保留消息的顺序,直到消费者消费。我们正在探索卡夫卡。我知道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
选项来控制生产者将要写入的分区吗?
同样在高级消费者中,我们可以控制它将使用哪个分区吗? 如何为消费者分配分区?
答案 0 :(得分:3)
Kafka仅对分区内的消息提供总订单,而不是在主题中的不同分区之间。
如果您的主题包含单个分区,则可以保证订购。如果您的消费者表现良好,您不必担心。
假设您至少拥有Kafka 0.9,则在代理注册时为每个使用者分配一个分区。如果您有2个分区和两个使用者的单个主题,则每个分区将分配一个分区。此信息存储在ConsumerPartitionOwnershipInfo
中,请参阅the design docs for more details。主题中的每个分区都只分配给使用者组中的一个成员。
消费者行为和0.9的变化很好地解释了here。