【问题标题】:Kafka - max.in.flight.requests.per.connection is per producer or session?Kafka - max.in.flight.requests.per.connection 是每个生产者还是会话?
【发布时间】:2020-09-24 08:31:00
【问题描述】:

我正在阅读文档,对参数“max.in.flight.requests.per.connection”有点困惑

客户端在阻塞之前将在单个连接上发送的未确认请求的最大数量。请注意,如果此设置设置为大于 1 并且发送失败,则存在由于重试(即启用重试)而导致消息重新排序的风险。

短语“未确认的请求”是指每个生产者或每个连接或每个客户端?

【问题讨论】:

    标签: apache-kafka confluent-platform


    【解决方案1】:

    每个分区。 Kafka 内部可能会多路复用连接(例如,使用单个连接为由同一代理处理的不同主题/分区发送多个请求),或者每个分区有一个单独的连接,但这些是性能问题,大部分 em> 在客户内部处理。

    retries 的文档提供了更多亮点(并阐明了每个分区)

    设置大于零的值将导致客户端重新发送发送失败并可能出现暂时错误的任何记录。请注意,此重试与客户端在收到错误后重新发送记录没有什么不同。允许重试而不将 ma​​x.in.flight.requests.per.connection 设置为 1 可能会改变记录的顺序,因为如果将两个批次发送到 单个分区,并且第一个失败并重试,但第二个成功,那么第二批中的记录可能会首先出现。另外请注意,如果 delivery.timeout.ms 配置的超时在成功确认之前首先到期,则在重试次数用完之前生产请求将失败。用户通常应该不设置此配置,而是使用 delivery.timeout.ms 来控制重试行为。

    【讨论】:

    • 嗯。但是,这听起来像是生产者配置中提到的“每个生产者”。无论如何,它会在内部使用“每个分区”?
    • 绝对是每个分区。我不知道还能说什么或指点你,让你放心。
    • 我很难同意你的看法。 connection 在这里,真正的意思是每个 broker。并且文档使用了关于分区的示例,只是为了让读者了解在处理重试时不将max.in.flight.requests.per.connection 设置为1 的含义。您应该重新访问并重新阅读文档。 @Nag 仅供参考
    • 嗨@尤金!我绝不是 Kafka 专家,而 Kafka 是一种移动技术。请在您的发现中添加另一个答案,因为它可能会帮助其他有此问题的人。
    • @Augusto 事情是 - 我到目前为止都不是。我的评论观点是让我们双方进行辩论并可能达成共识(并可能让您更新答案)。
    猜你喜欢
    • 1970-01-01
    • 2017-02-05
    • 2011-05-23
    • 1970-01-01
    • 2021-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多