guid会不会重复_Kafka的消息会丢失和重复吗?如何实现Kafka精确传递一次语义

我们都知道Kafka的吞吐量很大,但是Kafka究竟会不会丢失消息呢?又会不会重复消费消息呢?

ab2cd27aa55c6d4bbe9d8d639234e369.png

​ 有很多公司因为业务要求必须保证消息不丢失、不重复的到达,比如无人机实时监控系统,当无人机闯入机场区域,我们必须立刻报警,不允许消息丢失。而无人机离开禁飞区域后我们需要将及时报警解除。如果消息重复了呢,我们是否需要复杂的逻辑来自己处理消息重复的情况呢,这种情况恐怕相当复杂而难以处理。但是如果我们能保证消息exactly once,那么一切都容易得多。

下面我们来简单了解一下消息传递语义,以及kafka的消息传递机制。

首先我们要了解的是 message delivery semantic 也就是消息传递语义。

这是一个通用的概念,也就是消息传递过程中消息传递的保证性。

分为三种:

最多一次( at most once ): 消息可能丢失也可能被处理,但最多只会被处理一次。

可能丢失 不会重复

至少一次( at least once ): 消息不会丢失,但可能被处理多次。

可能重复 不会丢失

精确传递一次( exactly once ): 消息被处理且只会被处理一次。

不丢失 不重复 就一次

而kafka其实有两次消息传递,一次生产者发送消息给kafka,一次消费者去kafka消费消息。

两次传递都会影响最终结果,

两次都是精确一次,最终结果才是精确一次。

两次中有一次会丢失消息,或者有一次会重复,那么最终的结果就是可能丢失或者重复的。

0f24ccbdd71195942667114e85c07df1.png

一、Produce端消息传递

这是producer端的代码:

Properties properties = new Properties(); properties.put("bootstrap.servers
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值