技颠

0 声望

这家伙太懒,什么都没留下

个人动态
  • 技颠 回复 半兽人kafka poll records数据为空? 中 :

    好的,谢谢。我修改了每次拉取100条,效果是好一点了(1分钟能拉取的数据量更多了一些)。还是会有偶尔拉取为空的情况,我再找找为什么会有这个偶尔超时的情况。

    3年前
  • 半兽人 回复 技颠kafka poll records数据为空? 中 :

    我给你解释一下poll(100)吧,客户端是主动向kafka拉取消息的,100是去向kafka拉取的频率时间,当每次去kafka,都能拿到消息,那么,这个100ms就不会起作用,但,当拉取的消息是空的时候,kafka客户端就会认为,kafka的消息已经被我消费完了,那我就隔一段时间(100ms)再去向kafka拿,这个就是所谓的kafka长轮询。

    从你上面的配置来看,500条可能一个批次的消息了,如果拿了小与500条的,那是不是说明消息不够了,自然就会触发100ms的等待时间。

    我不太清楚你的环境情况,分区副本情况,分区的分布情况,所以很难去帮你分析更多具体的信息,但是核心就是我上面说的。

    你设置了自己的休眠时间,如果是测试目的,可以,如果你故意的,那就没必要了,你直接改100ms就可以了。

    不过,你可以缩小你的测试范围,比如分区数,分区的副本数,然后分区在你集群中的分配情况,从1个分区开始往上进行测试,让场景先变得单一点。好定位问题。

    3年前
  • 技颠 回复 半兽人kafka poll records数据为空? 中 :

    返回的消息为空是因为org.apache.kafka.clients.consumer.KafkaConsumer#poll(org.apache.kafka.common.utils.Timer, boolean)中的timer超时了,但是这个topic的数据都是同一条数据(内容一样),正常的时候拉取500条只用1毫秒,但有时候会超时。有什么因素能导致这个频繁超时呢?

    3年前
  • 技颠 回复 半兽人kafka poll records数据为空? 中 :

    你好,我发现和有没有key没有关系,数据都是一次性写入,也都是从头开始消费的,只是有时候我这么没有拉到数据的频率高一些(但实际是有数据的)。当没有拉到数据的时候,耗时就比较久一点,但实际上拉到数据的时候,每次拉取的时间就非常短。

    3年前
  • 技颠 回复 半兽人kafka poll records数据为空? 中 :

    关键是消费速度快的那个topic的数据消息体要比速度慢的消息还要大一些(通过record.serializedValueSize())这个计算,通过测试发现确实在consumer.poll(100)这个操作之后,我自身的topic返回空的消息的频率要比别人的topic要多一些。还有一个,就是我的消息是有key的,他们的消息没有key,这个会有这么大影响吗?

    3年前
  • 3年前