首页 > 其他分享 >Kafka的Exactly-once语义与事务机制

Kafka的Exactly-once语义与事务机制

时间:2022-11-28 00:01:36浏览次数:71  
标签:生产者 Exactly 语义 Kafka 消息 once

https://www.cnblogs.com/luxiaoxun/p/13048474.html

Kafka 0.11.x版本(对应 Confluent Platform 3.3),该版本引入了exactly-once语义。

精确一次确实很难实现(Exactly-once is a really hard problem)

Mathias Verraes说,分布式系统中最难解决的两个问题是:

  1. 消息顺序保证(Guaranteed order of messages)。
  2. 消息的精确一次投递(Exactly-once delivery)。

消息系统语义概述(Overview of messaging system semantics)

在一个分布式发布订阅消息系统中,组成系统的计算机总会由于各自的故障而不能工作。在Kafka中,一个单独的broker,可能会在生产者发送消息到一个topic的时候宕机,或者出现网络故障,从而导致生产者发送消息失败。根据生产者如何处理这样的失败,产生了不同的语义:

  1. 至少一次语义(At least once semantics):如果生产者收到了Kafka broker的确认(acknowledgement,ack),并且生产者的acks配置项设置为all(或-1),这就意味着消息已经被精确一次写入Kafka topic了。然而,如果生产者接收ack超时或者收到了错误,它就会认为消息没有写入Kafka topic而尝试重新发送消息。如果broker恰好在消息已经成功写入Kafka topic后,发送ack前,出了故障,生产者的重试机制就会导致这条消息被写入Kafka两次,从而导致同样的消息会被消费者消费不止一次。每个人都喜欢一个兴高采烈的给予者,但是这种方式会导致重复的工作和错误的结果。
  2. 至多一次语义(At most once semantics):如果生产者在ack超时或者返回错误的时候不重试发送消息,那么消息有可能最终并没有写入Kafka topic中,因此也就不会被消费者消费到。但是为了避免重复处理的可能性,我们接受有些消息可能被遗漏处理。
  3. 精确一次语义(Exactly once semantics): 即使生产者重试发送消息,也只会让消息被发送给消费者一次。精确一次语义是最令人满意的保证,但也是最难理解的。因为它需要消息系统本身和生产消息的应用程序还有消费消息的应用程序一起合作。比如,在成功消费一条消息后,你又把消费的offset重置到之前的某个offset位置,那么你将收到从那个offset到最新的offset之间的所有消息。这解释了为什么消息系统和客户端程序必须合作来保证精确一次语义。

 

参考: 

Kafka 0.11.0.0 是如何实现 Exactly-once 语义的

Kafka设计解析(八)- Exactly Once语义与事务机制原理

https://www.confluent.io/blog/exactly-once-semantics-are-possible-heres-how-apache-kafka-does-it/

https://www.confluent.io/blog/transactions-apache-kafka/

 

标签:生产者,Exactly,语义,Kafka,消息,once
From: https://www.cnblogs.com/cbugs/p/16931068.html

相关文章

  • apache kafka系列之客户端开发-java
    1.依赖包    <dependency>      <groupId>org.apache.kafka</groupId>      <artifactId>kafka_2.10</artifactId>      <ver......
  • Kafka 设计与原理详解
    一、Kafka简介本文综合了我之前写的kafka相关文章,可作为一个全面了解学习kafka的培训学习资料。1.1背景历史当今社会各种应用系统诸如商业、社交、搜索、浏览等像信息工厂......
  • Kafka设计解析(五)- Kafka性能测试方法及Benchmark报告
    摘要本文主要介绍了如何利用Kafka自带的性能测试脚本及KafkaManager测试Kafka的性能,以及如何使用KafkaManager监控Kafka的工作状态,最后给出了Kafka的性能测试报告。......
  • Kafka剖析(一):Kafka背景及架构介绍
     背景介绍Kafka创建背景Kafka是一个消息系统,原本开发自LinkedIn,用作LinkedIn的活动流(ActivityStream)和运营数据处理管道(Pipeline)的基础。现在它已被​​多家不同类型的......
  • 06-1-2大屏实时计算技术的深度剖析【双元】(1) flink写入es和kafka ---(2)flink案例代
                                                        ......
  • kafka学习笔记
    安装:0、JDK(采用了v8,v11未测试)1、Justdownload kafka.tar.gz, noneedzookeeper 2、tar开3、修改kafka/config下的server.properties(每服务一个,id及监听端口及Lo......
  • 为什么kafka延迟比rocketmq延迟高
    说kafka延迟比rocketmq延迟高是有一个前提的就是topic较多的时候这个和这2个MQ的数据存储结构有关系的在topic少的时候延迟基本一致。kafka的数据存储结构设计师尽可能......
  • Linux部署kafka集群
    Linux部署kafka集群(亲测有效)原创 陈肖萧晓 若愚Linux 2022-11-2308:00 发表于山东收录于合集#linux7个#kafka1个#集群1个Linux部署kafka(亲测有效)网上有太......
  • 面试官问:为什么kafka这么快,又能保证消息不丢失?
    小菜鸡最近在疯狂面试中,就是为了能拿到一份满意的offer,这不上周又去头条受虐了。面试过程中,由于小菜鸡的充分准备(letcode各种刷),各种算法题不在话下,顺利的通过的头条变态的算......
  • Kafka是什么-第一篇
    前言如果有幸目睹过系统从零到一的演变过程,大家估计都会有一种感叹,就是随着业务复杂度和流量的不断上升,系统变得越来越难以维护,面对高额的维护成本,攻城师们不得不对现有架构......