apache-kafka - 如何保证Kafka分区中的顺序

标签 apache-kafka kafka-producer-api

好的,我知道您只能获得每个分区的订单保证。

只是随机的想法/问题。

假设分区策略是正确的,并且将消息正确地分组到适当的分区(甚至说我们正在使用1个分区)

我想生产应用程序必须将每个消息一一发送到kafka,并确保在发送下一消息之前已确认每个消息?

最佳答案

是的,您是正确的,生产应用程序发送消息的顺序决定了它们存储在分区中的顺序。

Messages sent by a producer to a particular topic partition will be appended in the order they are sent. That is, if a message M1 is sent by the same producer as a message M2, and M1 is sent first, then M1 will have a lower offset than M2 and appear earlier in the log. http://kafka.apache.org/documentation.html#intro_guarantees



但是,如果同时有多条消息正在发送,则不确定如何确定顺序。

您可能还需要考虑生产者的acks配置。在某些失败情况下,如果发布M1并新的领导者收到M2之后领导者掉线,消息可能会丢失。在这种情况下,您将不会出现乱序情况,而是会丢失一条消息,因此它与您的原始问题略有正交,但是如果消息保证和顺序对您的应用程序至关重要,则需要考虑一些问题。
http://kafka.apache.org/documentation.html#producerconfigs

总的来说,设计一个顺序差异不那么重要的系统可以真正简化事情。

关于apache-kafka - 如何保证Kafka分区中的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39643210/

相关文章:

apache-kafka - Java Apache Kafka Producer 元数据更新器和重试逻辑

java - 在 KafkaBolt 中暴露 Kafka 发布异常

apache-kafka - 本地主机无法使用 Kafka 代理

ssl - SAN 在 SSL 证书中被清除

scala - 测试kafka和flink集成流程

java - Spring Boot kafka junit 失败

java - 创建 Kafka Producer 并调用方法 send()、flush() 和 close() 的正确顺序是什么?

apache-kafka - kafka怎么知道 "roll forward or roll back"是否是一笔交易?

python - 如何在kafka消费者中读取和处理高优先级消息?

mysql - 由 : io. debezium.text.ParsingException 引起:外部输入 'ASC' 期望