如何维护Kafka中的消息排序?

时间:2017-02-02 11:11:23

标签: apache-kafka

我们需要消息层,我们希望保留消息的顺序,直到消费者消费。我们正在探索卡夫卡。我知道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选项来控制生产者将要写入的分区吗?

同样在高级消费者中,我们可以控制它将使用哪个分区吗? 如何为消费者分配分区?

1 个答案:

答案 0 :(得分:3)

Kafka仅对分区内的消息提供总订单,而不是在主题中的不同分区之间。

如果您的主题包含单个分区,则可以保证订购。如果您的消费者表现良好,您不必担心。

假设您至少拥有Kafka 0.9,则在代理注册时为每个使用者分配一个分区。如果您有2个分区和两个使用者的单个主题,则每个分区将分配一个分区。此信息存储在ConsumerPartitionOwnershipInfo中,请参阅the design docs for more details。主题中的每个分区都只分配给使用者组中的一个成员。

消费者行为和0.9的变化很好地解释了here