转载: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消息的备份策略》

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

最新文章

  1. iOS widget开发
  2. cookie中文乱码
  3. Xilinx DCM 使用---- 输出频率问题
  4. linux系统免密码登陆
  5. activiti
  6. Oracle Client Language Problem
  7. Apache设置防DDOS模块mod_evasive
  8. 默认时,销毁会话,session_unset, session_destory
  9. unity3d 制造自己的水体water effect(一)
  10. SpringBoot 中常用注解
  11. AngularJS进阶(九)控制器controller之间如何通信
  12. .bat批处理启动redis
  13. 我的代码-models
  14. PythonStudy——元组 Tuple
  15. [工具] Snipaste
  16. nyoj 单调递增子序列(二)
  17. MsSQL使用加密连接SSL/TLS
  18. Devexpress VCL Build v2013 vol 13.2.2 发布
  19. Linux系统之路——用CentOS 7打造合适的科研环境
  20. 【spring boot】spring boot中使用@RestController不起作用,不返回json,依旧去找访问接口的请求地址对应的页面

热门文章

  1. 如何用RSS订阅?
  2. this指针的初运用
  3. vue 使用 supermap iclient-classic
  4. Android 平台 Native 代码的崩溃捕获机制及实现
  5. ToolbarDemo【Toolbar作为顶部导航栏的简单使用】
  6. SpringBoot入门教程(二十一)IntelliJ IDEA配置Quartz启动项
  7. C#语法——委托,架构的血液
  8. json属性名必须加引号的讨论
  9. Java笔记(day1~day6)
  10. 忘记Linux登录密码怎么办?