zoukankan      html  css  js  c++  java
  • 如何保证kafka消息不丢失

    image.png

    背景

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

    1 已经提交的消息

    2 有限度的持久化

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

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

    生产者丢失消息

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

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

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

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

    网络抖动: 重发

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

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

    消费者丢失消息

    kafka消费消息的模型:

    image.png

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

    file

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

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

    多线程消费丢失消息

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

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

    调优broker参数防止消息丢失

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

    file

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

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

    小结

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

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

    原创不易,关注诚可贵,转发价更高!转载请注明出处,让我们互通有无,共同进步,欢迎沟通交流。
    我会持续分享Java软件编程知识和程序员发展职业之路,欢迎关注,我整理了这些年编程学习的各种资源,关注公众号‘李福春持续输出’,发送'学习资料'分享给你!

  • 相关阅读:
    Python 安装、循环语句、数据类型(一)
    Python 字符、整型、列表字典等操作(二)
    JAVA实现文章的上一篇下一篇
    什么是公钥、私钥、密码、助记词
    XSS跨站网络攻击
    区块链相关知识
    冷钱包
    .NET 后台提交POST请求
    邮件的发送
    数据库中字段类型对应的C#中的数据类型
  • 原文地址:https://www.cnblogs.com/snidget/p/12783697.html
Copyright © 2011-2022 走看看