zoukankan      html  css  js  c++  java
  • kafka消息会不会丢失

    转载:https://baijiahao.baidu.com/s?id=1583469327946027281&wfr=spider&for=pc

    消息发送方式

    想清楚Kafka发送的消息是否丢失,需要先了解Kafka消息的发送方式。

    Kafka消息发送分同步(sync)、异步(async)两种方式

    默认是使用同步方式,可通过producer.type属性进行配置;

    Kafka保证消息被安全生产,有三个选项分别是0,1,-1

    通过request.required.acks属性进行配置:

    0代表:不进行消息接收是否成功的确认(默认值);

    1代表:当Leader副本接收成功后,返回接收成功确认信息;

    -1代表:当Leader和Follower副本都接收成功后,返回接收成功确认信息;

    六种发送场景

    两个维度相交,生成六种情况,如下图:

    消息丢失的场景

    网络异常

    acks设置为0时,不和Kafka集群进行消息接受确认,当网络发生异常等情况时,存在消息丢失的可能;

    客户端异常

    异步发送时,消息并没有直接发送至Kafka集群,而是在Client端按一定规则缓存并批量发送。在这期间,如果客户端发生死机等情况,都会导致消息的丢失;

    缓冲区满了

    异步发送时,Client端缓存的消息超出了缓冲池的大小,也存在消息丢失的可能;

    Leader副本异常

    acks设置为1时,Leader副本接收成功,Kafka集群就返回成功确认信息,而Follower副本可能还在同步。这时Leader副本突然出现异常,新Leader副本(原Follower副本)未能和其保持一致,就会出现消息丢失的情况;

    以上就是消息丢失的几种情况,在日常应用中,我们需要结合自身的应用场景来选择不同的配置。

    想要更高的吞吐量就设置:异步、ack=0;想要不丢失消息数据就选:同步、ack=-1策略

    附:Kafka备份策略,不理解的可以看我的另一篇文章《Kafka消息的备份策略》

    一个全栈程序猿的经验分享,大家觉得有收获的请在评论中给个鼓励,不足之处也请多多指出;最后预祝大家开心永在,感谢您的关注。

  • 相关阅读:
    Android布局与事件
    android 开发中共享全局数据Application的类
    从Android界面开发谈起【转】
    HttpClient java
    关于整合S&K框架的一些个小注意
    批处理执行多条语句
    Atitit. 软件设计 模式 变量 方法 命名最佳实践 vp820 attilax总结命名表大全
    atitit.软件设计模式大的总结attialx总结
    Atitit.软件开发的最终的设计 dsl化,ast化(建立ast, 解析执行ast)
    atitit。流程图的设计与制作 attilax 总结
  • 原文地址:https://www.cnblogs.com/myf008/p/8546411.html
Copyright © 2011-2022 走看看