绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
如何保证kafka消息不丢失
2020-05-25 15:09:31

背景

这里的kafka值得是broker,broker消息丢失的边界需要对齐一下:

1 已经提交的消息

2 有限度的持久化

如果消息没提交成功,并不是broke丢失了消息;

有限度的持久化(broker可用)

生产者丢失消息

producer.send(Object msg) ; 这个发送消息的方式是异步的;fire and forget,发送而不管结果如何;

失败的原因可能有很多,比如网络抖动,发送消息超出大小限制;

怎么破呢?永远使用带有返回值值的消息发送方式,即 producer.send(msg,callback)

通过callback可以准确的告诉你消息是否发送成功了,发送失败了你也可以有处置方法;

网络抖动: 重发

发送消息超出大小:调整消息大小进行发送

这种情况并不是broker丢失消息了,是producer的消息没有提交成功。

消费者丢失消息

kafka消费消息的模型:

即消费消息,设置好offset,类比一下:

说明时候消费者丢失数据呢?即先更新位移,再消费消息,如果消费程序出现故障,没消费完毕,则丢失了消息,此时,broker并不知道。

怎么破?总是先消费消息,再更新位移;这种可能带来消息重复消费的问题,但是不会出现消息丢失问题;

多线程消费丢失消息

即开启了位移自动提交,多线程处理的时候,如果有一个线程出现问题,但是还是提交了位移,会发生消息丢失。

怎么破? 关闭自动提交位移,消费者端配置参数:enable.auto.commit=false

调优broker参数防止消息丢失

主要通过调整配置来保证kafka消息不丢失。

然后就是producer发送消息一定要使用带回调函数的方法,并对发送失败的情况进行处理。

同时写consumer程序的时候先消费再提交;

小结

本节先限定了kafka消息不丢失是针对broker的,基本要求是:消息已提交到broker,而且至少有一个broker可用;

然后从生产者,消费者,配置参数这三个方面介绍了如何防止kafka的消息丢失。

我会持续分享Java软件编程知识和程序员发展职业之路! 原创不易,关注诚可贵,转发价更高!转载请注明出处,让我们互通有无,共同进步,欢迎沟通交流。

分享好友

分享这个小栈给你的朋友们,一起进步吧。

Kafka
创建时间:2020-05-22 09:55:12
Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写。Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。 这种动作(网页浏览,搜索和其他用户的行动)是在现代网络上的许多社会功能的一个关键因素。 这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。 对于像Hadoop的一样的日志数据和离线分析系统,但又要求实时处理的限制,这是一个可行的解决方案。Kafka的目的是通过Hadoop的并行加载机制来统一线上和离线的消息处理,也是为了通过集群来提供实时的消息。
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

栈主、嘉宾

查看更多
  • ?
    栈主

小栈成员

查看更多
  • wangdabin1216
  • 小雨滴
  • chenglinjava0501
  • 时间不说话
戳我,来吐槽~