【发布时间】:2017-04-15 20:37:50
【问题描述】:
我想要任何关于 Kafka 在将消息写入具有多个分区的主题时如何维护消息序列的信息/解释。 例如我有多个消息生产者,每个消息生产者按顺序生成消息,并在 Kafka 主题上写入超过 1 个分区。在这种情况下,消费者组将如何消费消息。
【问题讨论】:
标签: apache-kafka kafka-consumer-api kafka-producer-api
我想要任何关于 Kafka 在将消息写入具有多个分区的主题时如何维护消息序列的信息/解释。 例如我有多个消息生产者,每个消息生产者按顺序生成消息,并在 Kafka 主题上写入超过 1 个分区。在这种情况下,消费者组将如何消费消息。
【问题讨论】:
标签: apache-kafka kafka-consumer-api kafka-producer-api
Kafka 只提供一个分区内内的记录的总排序,而不是一个主题中不同分区之间的总排序。即使在一个分区内,如果启用重试并且 max.in.flight.requests.per.connection 大于 1,您仍然可能遇到乱序事件。
解决方法是创建一个只有一个分区的主题,尽管这意味着每个消费者组只有一个消费者进程。
【讨论】:
Kafka 将根据提供给生产者的消息密钥将消息存储在分区中。如果没有给出,则消息将以循环方式写入分区。要保持对某个主题的排序,您需要确保排序后的序列具有相同的键,或者该主题只有一个分区。
【讨论】: