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