Kafka线上常见问题及性能优化

消息丢失问题
1)消息发送端
  1. acks=0: 表示producer不需要等待broker确认收到消息的回复就可以继续发送下一条消息;该方式性能最高,但最容易丢消息,适用于大数据报表等对性能要求较高对数据丢失不敏感等场景。
  2. acks=1: 表示producer至少要等待leader分区副本成功将消息写入本地log之后不需要等待所有follower分区副本写入成功就可以继续发送下一条消息;该方式若follower副本没有成功备份数据但leader副本宕机了,此时消息会丢失。
  3. acks=-1或all: 表示producer需要等待所有分区副本(参数 min.insync.replicas 配置的副本备份个数)都成功写入log之后就可以发送下一条消息;该方式会保证只要有一个备份副本所在的broker存活就不会丢失消息,此方式最不容易丢消息,一般用于金融行业等消息安全性高的场景。若参数 min.insync.replicas 配置的副本备份个数为1则与acks=1类似。
2)消息消费端

消费端配置的是offset自动提交时,若消费到的消息还没处理完就自动提交offset,此时consumer直接宕机,则未执行完的消息就会丢失,下次也不会消费到。

消息重复消费问题
1)消息发送端

发送消息若配置重试机制,如网络抖动时间过长导致发送端发送超时,实际broker可能已经接收到消息,但发送端会重复发送消息

2)消息消费端

消费消息若配置自动提交,拉取的一批消息处理了一部分后还未来得及提交offset 服务宕机,下次重启又会重复拉取相同的一批消息处理;一般来说消费端需要做消息幂等处理

消息乱序问题

若发送端配置重试且acks=0机制,当发送1,2,3三条消息时第一条消息发送超时,接着发送2,3消息成功,后续第一条消息重试发送成功,那么在broker端写入消息log的顺序为2,3,1;
可以通过配置发送端同步发送消息且acks!=0的方式保证消息发送时的有序性。
注意:kafka全链路

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值