【问题标题】:Confused about Kafka Consumer Properties对 Kafka 消费者属性感到困惑
【发布时间】:2021-11-06 18:30:03
【问题描述】:

我对一些消费者 API 配置属性感到有些困惑。似乎它们要么发生冲突,要么相互抵消。谁能帮我理解以下键之间的区别。

定义

fetch.max.bytes:服务器应为获取请求返回的最大数据量
max.partition.fetch.bytes:服务器将返回的每个分区的最大数据量
max.poll.records:返回的最大记录数在一次 poll() 调用中

示例
fetch.max.bytes: 30000 (30kb)
max.partition.fetch.bytes: 20000000 (20mb)
max.poll.records: 1000

在我看来,上面的消费者定义似乎是说它最多可以接受 20mb 的数据/分区,但随后只指定了 30kb 的最大字节,这是没有意义的。最大轮询记录似乎也限制了数据摄入,因为根据每条记录的大小,1000 条可能太低或太高。

【问题讨论】:

    标签: java apache-kafka kafka-consumer-api


    【解决方案1】:

    fetch.max.bytesmax.partition.fetch.bytes 是发送给 Kafka 代理的 Fetch requests 的字段。它们分别确定代理将发送的 Fetch 响应的最大大小以及代理可以返回的每个分区的最大数据大小。使用这些值来计算 Fetch 响应的是代理。

    另一方面,max.poll.records 是仅限客户端的配置。它决定了对poll() 的调用可以返回多少条记录。

    消费者将在后台获取记录并缓冲它们,以便在调用poll() 时准备好记录。

    这些设置允许例如批量获取记录,这更有效,但仍将它们以小块或什至单独传递给消费者应用程序,具体取决于其执行的处理。

    【讨论】:

    • 知道了。我从您的回答中了解max.poll.records 好一点。在同一个配置中同时指定 fetch.max.bytesmax.partition.fetch.bytes 有什么用?我知道他们分别做什么,但仍然不明白为什么要同时指定两者。
    • 您不需要显式设置它们,因为它们具有合理的默认值。如果您有一个可以从不同值中受益的特定用例,例如为每个使用者分配的分区数量非常少或非常多,并且需要精确控制每个 Fetch 响应返回的数据量,则可以使用这些设置。跨度>
    • 这是有道理的。感谢您的澄清。我最近遇到了一个问题,我正在消费数据的代理有一个非常大的fetch.max.bytes,这导致了 OOM 问题,迫使我将它们设置为合理的值以保护消费者。
    猜你喜欢
    • 2018-03-29
    • 1970-01-01
    • 1970-01-01
    • 2012-01-18
    • 1970-01-01
    • 2018-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多