apache-kafka - Kafka 是否保证具有任何配置参数值的单个分区内的消息排序?

标签 apache-kafka kafka-producer-api kafka-python

如果我将 Producer 的 Kafka 配置参数设置为:

1. retries = 3
2. max.in.flight.requests.per.connection = 5

那么很可能一个分区内的消息可能不在 send_order 中。

Kafka 是否采取任何额外步骤来确保分区内的消息仅保持发送顺序
或者
使用上述配置,是否可能在分区内出现乱序消息?

最佳答案

抱歉不行。

使用您当前的配置,由于您的 retries,消息可能会无序到达。和 max.in.flight.requests.per.connection设置..

retries config 设置为大于 0,您将在以下情况下失去排序(只是一个随机数示例):

  • 您将消息/批处理发送到位于代理 0 上的分区 0,代理 1 和 2 是 ISR。
  • 代理 0 失败,代理 1 成为领导者。
  • 您的消息/批次返回失败,需要重试。
  • 同时,您将下一条消息/批次发送到现在已知位于代理 1 上的分区 0,这发生在您的上一批实际重试之前。
  • 消息/批次 2 得到确认(成功)。
  • 消息/批次 1 被重新发送,现在也得到确认。
  • 订单丢失。

  • 我可能是错的,但在这种情况下,即使使用 max.in.flight.requests.per.connection 也可能发生重新排序设置为 1 您可能会在代理故障转移的情况下丢失消息顺序,例如批次可以在前一个失败的批次确定它也应该发送给该经纪人之前发送给经纪人。

    关于max.in.flight.requests.per.connectionretries设置在一起甚至更简单 - 如果您对代理有多个未确认的请求,第一个失败的请求将无序到达。

    但是,请考虑到这仅与消息/批次由于某种原因未能确认的情况有关(发送给错误的经纪人,经纪人死亡等)

    希望这可以帮助

    关于apache-kafka - Kafka 是否保证具有任何配置参数值的单个分区内的消息排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36692113/

    相关文章:

    python - 获取我的 Kafka 队列中的最新消息时间戳

    java - 如何使用 jhipster 在 Kafka 集群上设置多个代理

    apache-kafka - 卡夫卡领导人选举何时举行?

    ssl - 通过 TLS 将 Kafka 生产者/消费者连接到代理

    java - 如何在由KafkaTemplate创建的事务中发送Kafka偏移量?

    python - 如何在程序中停止 Python Kafka Consumer?

    python - 如何从 confluent_python AVRO 消费者获取最新的偏移值

    java - 如何在胡椒盒生产者中访问 jmeter 变量?

    apache-spark - FAIR调度模式能否使从不同主题读取的Spark Streaming作业并行运行?

    java - 找不到依赖项 'org.apache.kafka:kafka-clients:2.1.1'