Kafka 获取最大字节数未按预期工作

Nic*_*ick 2 apache-kafka kafka-consumer-api

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

\n\n

fetch.max.bytes在经纪人上

\n\n

更改为 30 MB,以便每次轮询中仅允许 30 MB 的消息。代理似乎不尊重这一点,并尝试立即向消费者提供所有消息,导致消费者内存不足错误。我该如何解决这个问题?

\n

rph*_*rph 5

Kafka 配置可能相当庞大。通常在 Kafka 中,多个配置可以协同工作来实现结果。这带来了灵活性,但灵活性是有代价的。

来自以下文档fetch.max.bytes

记录由消费者批量获取,如果获取的第一个非空分区中的第一个记录批次大于该值,仍然会返回该记录批次以确保消费者能够取得进展。

仅在消费者方面,需要考虑更多配置来限制消费者内存使用,包括:

  • max.poll.records:限制单次调用 poll 检索的记录数。默认值为 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,它最终可能会保留单个分区的解压数据进行几次迭代。

我建议您也调整这些参数,希望这能让您进入所需的状态。