Kafka取最大字节数不能如期工作

问题描述 投票:1回答:1

我有一个主题,价值1GB的消息。A. Kafka消费者决定消费这些消息。我怎么做才能禁止消费者一次消费所有消息?我试着设置了

fetch.max.bytes 仲介

到30 MB,以允许每次投票只允许30 MB的消息。经纪人似乎并不尊重这一点,并试图将所有的消息一次给消费者,导致消费者内存不足的错误。我怎样才能解决这个问题?

apache-kafka kafka-consumer-api
1个回答
1
投票

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的存在 它可能最终会将单个分区的解压数据保留下来

我建议你也调整一下这些参数,希望这能让你达到理想的状态。

© www.soinside.com 2019 - 2024. All rights reserved.