kafka消费者poll数据,参数设置的为1000ms,max.poll.records=3000,基本每次都能拉取到2000多条消息,今天突然出现了一次拉取几十条几百条消息,这种情况正常吗???为什么会出现这种数据消息数不均匀的情况????
发表于 2019-10-22
kafka消费者poll数据,参数设置的为1000ms,max.poll.records=3000,基本每次都能拉取到2000多条消息,今天突然出现了一次拉取几十条几百条消息,这种情况正常吗???为什么会出现这种数据消息数不均匀的情况????
拉取的消息数量,跟消息的大小也有关系,一个批次的消息总大小是固定的。
可参考:https://www.orchome.com/535
嗯嗯 是这样 我这边每个消息大小是固定的 但就是有时候拉取的消息数量量特别少 一般时候2000多 偶尔几百
大佬 你好 现在的情况是不同批次的消息,总大小差距较大,目前不知道是什么情况???
一次性拉取的批次大小,有几个因素决定。
比如你有几个分区,消费者有几个,1个消费者绑定了几个分区。
如果绑定了1个分区,那消费者持续拉取该分区的,如果你的消息大小不变,那这个就会比较平稳,如果1个消费者绑定多个分区,那它就会轮询获取这多个分区的消息(轮询需要耗时)。
拉取消息有2个重要的因素,一个是时间,一个是批次的总量,比如100毫秒为时间,那么100毫秒内不管消息填满批次的总量,都将返回消息,或者100毫秒还没到,批次已经满了,则马上返回。
三个分区 对应三个消费者 时间是1000ms 消息批次总大小为2m 一个分区一个消费者 基本情况都是拉取2000多条消息 说明消息总大小限制没问题,今天测试时出现了部分几百条还有几十条的情况 感觉很奇怪 难道是1000ms就拉取了这么点消息吗???? 感觉违背了常理
单个消息大小基本没变
这个poll(ms)设置的时间没有用的,当你有持续的消息进来的时候,是持续的去拉取消息。
而当消息没有的时候,多长时间去向kafka询问拉取。
你说的是这个参数吗??max.poll.interval.ms=300000
这个poll(ms)设置的时间没有用的是什么意思 这个不是拉取消息的时间吗?
测试时候消息一直都是积压状态的
当前的参数配置是这样的
max.poll.interval.ms=300000 max.poll.records=3000 max.partition.fetch.bytes=1048576 poll(1000)
我是不是忽略了什么参数的设置呢? 才导致这种消息拉取不均匀的情况出现
我是不是忽略了什么参数的设置呢? 才导致这种消息拉取不均匀的情况出现
poll(1000)
这个是当kafka上没有消息的时候,多长时间去拉取一次。上面那几个都是
max
的限制,你关注的配置都是每个分区的,而不是整体的,整体是指,你有3个分区,每个分区一次性拉40M,但是你的总限制是100M,自然就会有1个分区拉的少。如:fetch.max.bytes
还有,一个消费者对应一个分区,这个分区的消息不会被其他的消费者消费到,跟分区对应,本身就是"均匀"的。
此外,消息是批量拉取的,是kafka服务于客户端程序之间的,为了减少单次传输频次而已,应用也不会一次性处理2000条消息(同一时间,并行和串行各自实现)
嗯嗯 确实有您说的这种情况,确实是我没考虑到的。
大佬帮忙分析一下有没有这种情况,max.partition.fetch.bytes限制的情况下,假如fetch到了5000个record,放到本地缓存后,由于max.poll.records限制每次只能poll出1500个record。那么KafkaConsumer就需要执行4次才能将这一次通过网络发起的fetch请求所fetch到的这5000个record消费完毕。其中前3次是每次pool中1500个record,最后一次是poll出500个record。
嗯,配置有优先顺序,当消费者注册到kafka的时候,就会把max.poll.records等信息告知kafka,kafka会的策略会根据这些条件,哪个先达到了就立即返回。
好的 非常感谢
你的答案