关于kafka消费能力的思考

引子

  • 在我们的开发过程中,会经常遇到kafka消费能力低,导致消费堆积的问题,kafka默认的消息保存有效期是7天,7天后消息自动过期(无论是否消费),此时我们可以通
    1)加大处理线程数量 或者起多节点去消费 2 )优化处理逻辑,提高处理效率
    这个提高kafka消费能力的方法,百度上已有很多博客有讲,我就不在写出来了。 但我要说的是另一个方面:kafka消费降速

需要降速缘由

# 需要降速缘由

  • 缘由:公司的kafka消费工程一直在消费,但是业务时不时更新用户数据,导致在用户高峰期突然丢过来千万基本kafka消息,导致kafka消费,影响到了正常用户的用户体验,如接口影响超时,导致用户体验不好。

    当然业务操作避免用户高峰期,这个是可以解决的,但是这次我是想从技术的层面上进行解决问题。

解决方案

解决方案
1)减少节点数量,高峰期消费节点由原来的6个减少为2个,已降低消费速率(注:这个需要系统管理员进行手工操作,长期操作并不可取)
2)调整线程池中线程的数量。
3)kafka层面上:
可以通过适当减小
max.poll.records,max.poll.interval.ms,max.partition.fetch.bytes的值来降低kafka的消费速率。

减少节点数量

  • 在减小节点的数量时,要认真观察生产区上kafak消息的生产速率和消费的速率,要保证减小节点后,堆积的消费量很少,或者最起码堆积的消费要在7天内能被消费完(注:7天)

调整线程池中线程的数量

  • 通过压测确定业务系统消费kafka消息的瓶颈。从而设置合理的线程数量。例如我公司在启用了线程 最小的线程数是5 最大是10,
    其了6个节点去消费数据,在不减小节点的情况下,经过压测发现最大7个线程的情况下,在业务高峰期不影响到用户的操作,故调整最大线程调整为7。

调整kafka消费端参数

我们看下较官方的对三个字段的解释:

  • max.poll.records:这个参数用来配置 Consumer
    在一次拉取请求中拉取的最大消息数,默认值为500(条)。如果消息的大小都比较小,*则可以适当调大这个参数值来提升一定的消费速度。(既然调大可以提升消费速度,那么适当减小就可以降低消费速度,注:这个调整前,一定要计算业务的生产消费的速度,避免产生消息堆积)。

关于:max. poll. interval. ms

  • max. poll. interval. ms <= 处理逻辑最大时间
    这个参数是0.10.1.0版本后新增的,可能很多地方看不到喔。这个参数需要根据实际业务处理时间进行设置,一旦Consumer处理不过来,就会被踢出Consumer
    Group 注意:如果业务平均处理逻辑为1分钟,那么max. poll. interval.
    ms需要设置稍微大于1分钟即可,但是session. timeout. ms可以设置小一点(如10s),用于快速检测Consumer崩溃。

max.partition.fetch.bytes:

  • 这个参数用来配置从每个分区里返回给 Consumer 的最大数据量,默认值为1048576(B),即1MB。这个参数与
    fetch.max.bytes
    参数相似,只不过前者用来限制一次拉取中每个分区的消息大小,而后者用来限制一次拉取中整体消息的大小。同样,如果这个参数设定的值比消息的大小要小,那么也不会造成无法消费,Kafka
    为了保持消费逻辑的正常运转不会对此做强硬的限制。

参考博文:https://juejin.im/post/5bec10ca6fb9a049b13dc1e4

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值