apache-kafka - Kafka fetch max bytes 无法按预期工作
问题描述
我有一个价值 1 GB 消息的主题。A. Kafka 消费者决定消费这些消息。我能做些什么来禁止消费者一次消费所有消息?我试图设置
fetch.max.bytes
在经纪人上
到 30 MB 以在每次轮询中只允许 30 MB 的消息。代理似乎不尊重这一点,并试图一次将所有消息提供给消费者,从而导致消费者内存不足错误。我该如何解决这个问题?
解决方案
Kafka 的配置可能非常庞大。通常在 Kafka 中,多个配置可以协同工作以达到一个结果。这带来了灵活性,但灵活性是有代价的。
从以下文档fetch.max.bytes
:
记录由消费者分批获取,如果获取的第一个非空分区的第一个记录批大于该值,仍然会返回记录批,以确保消费者可以进行。
只有在消费者方面,有更多的配置需要考虑来限制消费者的内存使用,包括:
max.poll.records
:限制在一次轮询调用中检索到的记录数。默认值为 500。max.partition.fetch.bytes
: 限制每个分区获取的字节数。这应该不是问题,因为默认值为 1MB。
根据KIP-81中的信息,实际使用的内存应该是min(num brokers * max.fetch.bytes, max.partition.fetch.bytes * num_partitions)
.
此外,在同一个 KIP 中:
消费者(Fetcher)延迟解压,直到记录返回给用户,但由于 max.poll.records,它可能最终会保留来自单个分区的解压数据进行几次迭代。
我建议您也调整这些参数,希望这会让您进入所需的状态。
推荐阅读
- javascript - 重置 JS 秒表时遇到问题
- reactjs - 如何在 ReactJS 中使用全局 javascript 变量?
- c# - 从 asp.core 2.2 迁移到 3.1。Autofac.Core.DependencyResolutionException
- javascript - 如何通过在 JavaScript 和 PHP 中拖放外部事件来更新数据库中的事件?
- java - 如何将有界泛型类型与流和单个对象一起使用
- php - Laravel - 解析具有依赖关系的类并执行实例化类的构造函数
- scala - 如何使用 Spark 有效地检查列中的所有值?
- database - 根据字段中现有/不存在的值查找产品
- r - 闪亮:文本框自动调整大小文本,而不仅仅是字符串
- prolog - Prolog 中如何解释匿名变量?