【问题标题】:How to maintain ordering of message in Kafka?如何保持Kafka中消息的顺序?
【发布时间】:2017-06-19 10:24:31
【问题描述】:

我们有消息层的要求,我们希望保留消息的顺序,直到它被消费者消费。我们也在探索 Kafka。我了解 Kafka 不保证跨分区排序,但在分区内保持顺序。

我在想我们是否可以确保特定的生产者(具有某些键值属性)在主题 t1 的特定分区 p1 中发布其消息,并且我们是否可以确保消费者从同一分区 p1 获取消息。这将达到我们的目的。

kafka-console-producer.sh help 中,我看到如下:

--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 选项控制生产者写入的分区吗?

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

【问题讨论】:

标签: apache-kafka


【解决方案1】:

Kafka 仅提供分区内消息的总顺序,而不是主题中不同分区之间的总顺序。

如果你有一个单分区的主题,那么顺序是有保证的。如果您的消费者表现良好,您不必担心。

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

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

【讨论】:

  • 因此,如果我有严格的业务要求,我要以异步方式在各种服务器中创建对象列表(按严格顺序),我需要使用 1 个分区或 1 个键来散列,正确?
  • 只使用一个分区和尽可能多的副本(最多等于代理的数量)。
猜你喜欢
  • 1970-01-01
  • 2020-03-04
  • 2019-10-28
  • 1970-01-01
  • 2018-07-05
  • 1970-01-01
  • 2012-01-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多