日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

flink 卡夫卡_卡夫卡–一次语义学

發布時間:2023/12/3 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 flink 卡夫卡_卡夫卡–一次语义学 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

flink 卡夫卡

在分布式環境中,故障是很常見的情況,可以隨時發生。 在Kafka環境中,代理可能崩潰,網絡故障,處理故障,發布消息時失敗或無法使用消息等。這些不同的場景引入了不同類型的數據丟失和重復。

失敗場景

A(確認失敗):生產者成功發布了消息,重試> 1,但由于失敗而未收到確認。 在這種情況下,生產者將重試相同的消息,可能會引入重復消息。

B(生產者進程在批處理消息中失敗):生產者發送了一批失敗的消息,但發布的成功很少。 在這種情況下,一旦生產者重新啟動,它將再次批量重新發布所有消息,這將在Kafka中引入重復消息。

C(觸發并忘記失敗)生產者發布的消息,重試= 0(觸發并忘記)。 如果失敗,發布的消息將不知道并發送下一條消息,這將導致消息丟失。

D(批處理消息中的消費者失敗)消費者從Kafka接收到一批消息,并手動提交其偏移量(enable.auto.commit = false)。 如果消費者在提交給Kafka之前失敗,則下次消費者將再次使用相同的記錄,這些記錄將在消費者端復制副本。

精確一次語義

在這種情況下,即使生產者嘗試重新發送消息,它也導致消息將被消費者發布和消費一次。

為了在Kafka中實現Exactly-Once語義,它使用以下3個屬性

  • enable.idempotence = true(地址a,b和c)
  • MAX_IN_FLIGHT_REQUESTS_PER_CONNECTION = 5(生產者每次連接總是有一個飛行中請求)
  • isolated.level = read_committed(地址d)
  • 啟用冪等(enable.idempotence = true)

    冪等傳遞使生產者可以在單個生產者的生命周期內,將消息僅一次寫入Kafka到主題的特定分區,而不會造成數據丟失和每個分區的訂單。

    “請注意,啟用冪等性要求MAX_IN_FLIGHT_REQUESTS_PER_CONNECTION小于或等于5,RETRIES_CONFIG大于0且ACKS_CONFIG為'all'。 如果用戶未明確設置這些值,則將選擇合適的值。 如果設置了不兼容的值,將拋出ConfigException”

    為了實現冪等性,Kafka在生成消息時使用唯一的ID(稱為產品ID或PID和序列號)。 生產者在發布的每個消息上保持遞增的序列號,這些消息具有唯一的PID。 代理始終將當前序列號與前一個序列號進行比較,如果新序列號不比上一個序列號大+1,則它會拒絕,這會避免重復;如果消息中丟失了更大的序列號,則會拒絕同時顯示

    在失敗的情況下,代理將序列號與先前的序列號進行比較,如果序列不增加,+ 1將拒絕該消息。

    交易(isolation.level)

    事務使我們能夠自動更新多個主題分區中的數據。 事務中包含的所有記錄將被成功保存,或者沒有保存成功,它允許您在同一事務中提交消費者補償以及已處理的數據,從而允許端到端的一次精確語義。

    生產者不等待將消息寫入到kafka那里,生產者使用beginTransaction,commitTransaction和abortTransaction(在失敗的情況下)消費者使用隔離級別。read_committed或read_uncommitted

    • read_committed:使用者將始終僅讀取已提交的數據。
    • read_uncommitted:按偏移順序讀取所有消息,而無需等待事務提交

    如果具有Isolation.level = read_committed的使用者到達尚未完成的事務的控制消息,則它將直到該生產者提交或中止該事務或發生事務超時之前,不會再從該分區傳遞任何消息。 事務超時由生產者使用配置transaction.timeout.ms(默認為1分鐘)確定。

    生產者和消費者中的確切時間

    在正常情況下,生產者和消費者是分開的。 生產者必須具有冪等性并同時管理事務,以便消費者可以使用isolation.level讀取read_committed來使整個過程成為原子操作。 這樣可以確保生產者將始終與源系統同步。 即使生產者崩潰或事務中止,它也始終是一致的,并且一次將消息或一批消息發布為一個單元。

    同一用戶一次將收到消息或一批消息。

    在Exactly-Once中,語義生產者與消費者一起將作為原子操作出現,它將作為一個單元進行操作。 要么發布一次就被消耗掉,要么中止。

    在Kafka Stream中恰好一次

    Kafka Stream消耗來自主題A的消息,處理并將消息發布到主題B,并在發布后使??用commit(commit主要在后臺運行)將所有狀態存儲數據刷新到磁盤。

    Kafka Stream中的“一次寫入”模式是一次“讀取-處理-寫入”模式,可確保將這些操作視為原子操作。 由于Kafka Stream可以滿足生產者,消費者和交易的需求,因此Kafka Stream帶有特殊的參數processing.guarantee,它可以完全地_once或at_least_once使得不單獨處理所有參數變得容易。

    Kafka Streams原子地更新使用者偏移量,本地狀態存儲,狀態存儲changelog主題和生產,以一起輸出所有主題。 如果這些步驟中的任何一個失敗,則所有更改都將回滾。

    processing.guarantee:確切地自動提供以下參數,您無需明確設置

  • isolated.level = read_committed
  • enable.idempotence = true
  • MAX_IN_FLIGHT_REQUESTS_PER_CONNECTION = 5
  • 翻譯自: https://www.javacodegeeks.com/2020/05/kafka-exactly-once-semantics.html

    flink 卡夫卡

    總結

    以上是生活随笔為你收集整理的flink 卡夫卡_卡夫卡–一次语义学的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。