我有一个主题,价值1GB的消息。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的存在 它可能最终会将单个分区的解压数据保留下来
我建议你也调整一下这些参数,希望这能让你达到理想的状态。