成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

一文讀懂kafka的冪等生產者

開發 架構 Kafka
KAFKA 作為開源分布式事件流平臺,在大數據和微服務領域都有著廣泛的應用場景,是實時流處理場景下消息隊列事實上的標準。用一句話概括,KAFKA 是實時數倉的基石,是事件驅動架構的靈魂。

[[422790]]

本文轉載自微信公眾號「明哥的IT隨筆」,作者 IT明哥 。轉載本文請聯系明哥的IT隨筆公眾號。

1 前言

大家好,我是明哥!

KAFKA 作為開源分布式事件流平臺,在大數據和微服務領域都有著廣泛的應用場景,是實時流處理場景下消息隊列事實上的標準。用一句話概括,KAFKA 是實時數倉的基石,是事件驅動架構的靈魂。

但是一些技術小伙伴,尤其是一些很早就開始使用 KAFKA 的技術小伙伴們,對 KAFKA 的發展趨勢和一些新特性,并不太熟悉,在使用過程中也踩了不少坑。

有鑒于此,我們接下來會有一個 KAFKA 系列文章,專門講述 KAFKA 的這些新特性。

本文是該系列文章之一,講述 KAFAK 的冪等生產者。

以下是正文。

2 從歷史視角看 KAFKA 的發展

首先我們從歷史視角,看下 KAFKA 的發展:

  • KAFKA 在2013年12月推出了一個重要的版本 0.8.0,該版本相當重要,因為它通過 KAFKA-50 首次引進了多副本機制,為容錯打下了堅實的基礎;
  • 然后在后續版本中逐步增添了很多新的功能特性:
    • 如逐步擺脫對 zookeeper的依賴;
    • 如支持 compact 清理策略;
    • 如支持 kafka tired storage;
    • 如生產者冪等性;
    • 如對事務的支持;
    • 如大的 kafka 生態的 kafka connect api, kafka stream api 以及 KSQL, 還有 kafka schema registry;
  • 到目前為止(202109),KAFKA 最新的穩定版已經演進到了 2.8.0;
  • KAFKA 已經從最開始僅僅作為一個高吞吐的消息中間件,發展到了如今實時流處理場景下消息隊列事實上的標準,用一句話概括,KAFKA 是實時數倉的基石,是事件驅動架構的靈魂。
  • 但是如今在市面上生產環境中,還不乏有使用早期版本如 0.8.0 版本的情況。

kafka-timeline

kafka-api

3 什么是冪等生產者?

我們知道,當 kafka producer 向 broker 中的 topic發送數據時,可能會因為網絡抖動等各種原因,造成 producer 收不到 broker 的 ack 確認信息。此時 producer 有兩種選擇:

producer 可以選擇忽略沒有收到 ack 確認消息,不做任何進一步處理:此時有可能會丟失消息。(之所以說有可能,是因為消息有可能沒有寫到 broker 的topic 中,但也有可能已經正確地寫到了 broker 的 topic 中,只是回調的 ack 消息因網絡抖動 producer 沒有收到;)

producer 也可以選擇多次嘗試重發消息,直到收到ack 確認消息或重試最大次數到達: 此時有可能會造成消息的重復寫,即 broker 端的 topic 中,重復地存儲了重試發送的這些消息;

producer 重發沒有收到 ack 確認的消息, 也可能會造成 broker 端 topic 的 partition 中 消息的順序混亂,即因失敗重發的消息在部分沒有失敗不需要重發的消息之后。

因 producer 重發沒有收到 ack 確認的消息造成數據重復的問題,可以參見如下示意圖,圖中 message 7/8/9/10 即為重復的消息。

producer-resend-failure

KAFKA 的冪等生產者即 idempotent producer,就是解決上述問題的:它可以確保消息被正確地投遞到 broker端,不會丟失沒有重復,而且是以正確的順序存儲在 topic 的各個 partition 中。

4 如何啟用冪等生產者?

  • 啟用冪等生產者,不涉及任何代碼層面的改動,只涉及以下配置項的更改:
  • enable.idempotence=true;//冪等生產者功能開關
  • message.send.max.retries=xx //發送失敗重試次數,可以配置很大比如10000000,甚至Integer.MAX_VALUE;
  • max.in.flight.requests.per.connection=xx //xx <= 5, 代表每個連接中在途請求次數,有的博文說該參數必須配置為=1,其實不然,只需要<=5即可(max.in.flight must be set <= 5 when enable.idempotence is true");
  • Acks=All //ACK 確認參數,可選 0/1/-1/ALL,-1 與 ALL 等價。在開啟冪等生產者功能時,該參數必須配置為ALL/-1,即所有 ISR 都要確認收到了消息,才認為消息投遞成功(acks must be set to all when enable.idempotence is true");
  • 在開啟冪等生產者即 enable.idempotence=true 的情況下,也可以不配置參數 max.in.flight.requests.per.connection 和參數 Acks,此時這兩個參數會被自動配置;

5 冪等生產者的原理是什么?

首先需要說明下,在啟用冪等生產者的情況下,消息失敗時的重新發送,是由 kafka client 自動實現的,對我們來講是透明的,我們不需要在代碼中重試發送。(事實上,在代碼中重試消息發送,反而會引起消息重復).

其內部工作原理如下:

  • 在 producer 端,每個 producer 都被 broker 自動分配了一個 Producer Id (PID), producer 向 broker 發送的每條消息,在內部都附帶著該 pid 和一個遞增的 sequence number;
  • 在 broker 端,broker 為每個 topic 的每個 partition 都維護了一個當前寫成功的消息的最大 PID-Sequence Number 元組;
  • 當 broker 收到一個比當前最大 PID-Sequence Number 元組小的 sequence number 消息時,就會丟棄該消息,以避免造成數據重復存儲;
  • 當 broker 失敗重新選舉新的 leader 時, 以上去重機制仍然有效:因為 broker 的 topic 中存儲的消息體中附帶了 PID-sequence number 信息,且 leader 的所有消息都會被復制到 followers 中。當某個原來的 follower 被選舉為新的 leader 時,它內部的消息中已經存儲了PID-sequence number 信息,也就可以執行消息去重了。
  • 冪等生產者,在 broker 端去重的工作原理,如下圖所示:圖片

6 冪等生產者與事務有何關系?

冪等生產者是 kafka 事務的必要不充分條件,即:

開啟冪等生長者,不一定需要開啟事務;

開始 kafka 事務,必須要開啟冪等生產者;

 

事實上,開啟 kafka事務時,kafka 會自動開啟冪等生產者。

 

責任編輯:武曉燕 來源: 明哥的IT隨筆
相關推薦

2024-10-11 09:27:52

2021-04-20 08:32:51

消息MQ隊列

2023-12-22 19:59:15

2021-08-04 16:06:45

DataOps智領云

2023-12-15 10:20:42

FastAPIPython開發

2021-09-04 19:04:14

配置LogbackJava

2018-09-28 14:06:25

前端緩存后端

2022-09-22 09:00:46

CSS單位

2025-04-03 10:56:47

2022-11-06 21:14:02

數據驅動架構數據

2019-05-14 12:18:00

等保等保2.0

2023-11-27 17:35:48

ComponentWeb外層

2023-05-20 17:58:31

低代碼軟件

2022-07-05 06:30:54

云網絡網絡云原生

2022-07-26 00:00:03

語言模型人工智能

2021-12-29 18:00:19

無損網絡網絡通信網絡

2022-12-01 17:23:45

2022-10-20 08:01:23

2023-11-21 09:41:00

緩存策略存儲

2022-03-13 18:27:09

Redis數據庫開源
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美激情在线观看一区二区三区 | 日韩久久精品 | 手机在线观看 | 一区在线播放 | 亚洲97| 亚洲一区二区三区高清 | 成人国产精品免费观看 | 亚洲精品视频在线看 | 国产精品午夜电影 | 精品av | 精品成人av | 国产精品综合色区在线观看 | 亚洲精选一区二区 | 天天操夜夜爽 | 国产在线精品一区二区三区 | 欧美日韩福利视频 | 亚洲一区在线日韩在线深爱 | 国产成人精品免费视频大全最热 | 日本视频中文字幕 | 日韩中文一区 | 日韩一区二区成人 | 午夜在线视频一区二区三区 | 亚洲国产高清高潮精品美女 | 精品一区二区三区四区视频 | 夜夜操天天操 | 99久久精品国产一区二区三区 | 91视频在线看 | 韩日三级| 五月婷婷视频 | 免费一级毛片 | 亚洲在线中文字幕 | 国产999精品久久久 午夜天堂精品久久久久 | 天天插天天射天天干 | 在线观看www视频 | 免费99精品国产自在在线 | 欧美日韩精品一区二区三区四区 | 日韩成人在线观看 | 欧美九九| 日韩一区二区在线免费观看 | 日韩在线免费 | 国产精品久久久久久久久免费相片 |