关于Kafka的fetch.max.bytes与max.partition.fetch.bytes配置的疑问
Kafka fetch.max.bytes 与 max.partition.fetch.bytes 配置疑问解答
配置含义确认
你的理解完全正确:
fetch.max.bytes:限制单次拉取请求返回的整个响应体总大小,这个响应可能包含来自多个主题、多个分区的数据。max.partition.fetch.bytes:限制单次拉取响应中单个分区返回的数据大小。
核心问题解答:max.partition.fetch.bytes设得高于fetch.max.bytes是否有意义?
并非完全没有意义,结合官方配置逻辑来看:
当某个分区存在单条(或一批)消息,其大小超过fetch.max.bytes但未超过max.partition.fetch.bytes时,Kafka服务器仍然会返回该分区的消息——此时整个响应的大小会突破fetch.max.bytes的限制,但这是合理的设计,目的是避免消费者因无法拉取大消息而陷入停滞。
如果把max.partition.fetch.bytes设得和fetch.max.bytes一样小,一旦某个分区出现超过该值的大消息,消费者就无法拉取到这条消息,消费进程会一直卡住。
Confluent官方配置说明(翻译)
fetch.max.bytes:服务器为单次拉取请求返回的最大字节数。若查询的多个分区中,存在某个分区的消息大小超过此值,只要该分区的消息大小未超出
max.partition.fetch.bytes,服务器仍会返回该分区的消息,最终响应大小可能因此超过fetch.max.bytes。
max.partition.fetch.bytes:服务器为单个分区返回的最大字节数。此配置值必须大于Broker端的
message.max.bytes(或replica.fetch.max.bytes),否则消费者可能无法读取过大的消息,导致消费停滞。
内容的提问来源于stack exchange,提问作者Hunt_
相关产品推荐
相关产品推荐

