kafka 丢弃数据_kafka 生产者和幂等
Kafka優化總結 (不錯)
https://blog.csdn.net/zjh_746140129/article/details/88779640?blog.csdn.netKafka面試題參考(不錯)
https://blog.csdn.net/linke1183982890/article/details/83303003?blog.csdn.netKafak(04) Kafka生產者事務和冪等(很好)
Kafak(04) Kafka生產者事務和冪等?www.heartthinkdo.com本文概覽:在Kafka 0.11.0.0引入了 EOS(exactly once semantics,精確一次處理語義)的特性,這個特性包括kafka冪等性和kafka事務兩個屬性。本小節對這個屬性進行介紹。
1 生產者冪等性
1.1 引入
冪等性引入目的:
- 生產者重復生產消息。生產者進行retry會產生重試時,會重復產生消息。有了冪等性之后,在進行retry重試時,只會生成一個消息。
1.2 冪等性實現
1.2.1 PID 和 Sequence Number
為了實現Producer的冪等性,Kafka引入了Producer ID(即PID)和Sequence Number。
- PID。每個新的Producer在初始化的時候會被分配一個唯一的PID,這個PID對用戶是不可見的。
- Sequence Numbler。(對于每個PID,該Producer發送數據的每個<Topic, Partition>都對應一個從0開始單調遞增的Sequence Number。
Broker端在緩存中保存了這seq number,對于接收的每條消息,如果其序號比Broker緩存中序號大于1則接受它,否則將其丟棄。這樣就可以實現了消息重復提交了。但是,只能保證單個Producer對于同一個<Topic, Partition>的Exactly Once語義。不能保證同一個Producer一個topic不同的partion冪等。
實現冪等之后
2 事務屬性
2.1 事務屬性理解
事務屬性是2017年Kafka 0.11.0.0引入的新特性。類似于數據庫事務,只是這里的數據源是Kafka,kafka事務屬性是指一系列的生產者生產消息和消費者提交偏移量的操作在一個事務,或者說是是一個原子操作),同時成功或者失敗。
注意:在理解消息的事務時,一直處于一個錯誤理解就是如下代碼中,把操作db的業務邏輯跟操作消息當成是一個事務。其實這個是有問題的,操作DB數據庫的數據源是DB,消息數據源是kfaka,這是完全不同兩個數據,一種數據源(如mysql,kafka)對應一個事務,所以它們是兩個獨立的事務:kafka事務指kafka一系列 生產、消費消息等操作組成一個原子操作;db事務是指操作數據庫的一系列增刪改操作組成一個原子操作。void kakfa_in_tranction(){
// 1.kafa的操作:讀取消息或者生產消息
kafkaOperation();
// 2.db操作
dbOperation()
}2.2 引入事務目的
在事務屬性之前先引入了生產者冪等性,它的作用為:
(1)生產者多次發送消息可以封裝成一個原子操作,要么都成功,要么失敗
(2)consumer-transform-producer模式下,因為消費者提交偏移量出現問題,導致在重復消費消息時,生產者重復生產消息。需要將這個模式下消費者提交偏移量操作和生成者一系列生成消息的操作封裝成一個原子操作。
消費者提交偏移量導致重復消費消息的場景:消費者在消費消息完成提交偏移量o2之前掛掉了(假設它最近提交的偏移量是o1),此時執行再均衡時,其它消費者會重復消費消息(o1到o2之間的消息)。
在一個原子操作中,根據包含的操作類型,可以分為三種情況:
(1) 只有Producer生產消息;
(2) 消費消息和生產消息并存,這個是事務場景中最常用的情況,就是我們常說的“consume-transform-produce ”模式
(3) 只有consumer消費消息,
前兩種情況是事務引入的場景,最后一種情況沒有使用價值(跟使用手動提交效果一樣)
超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生總結
以上是生活随笔為你收集整理的kafka 丢弃数据_kafka 生产者和幂等的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python import xlrd 报
- 下一篇: 应用宝认领应用签名_应用宝8.0版本即将