我希望避免將重複郵件發送到卡夫卡主題。驗證卡夫卡主題中是否存在郵件
什麼是實現它的理想方式?
使用Java客戶端對Apache卡夫卡,反正是有驗證,如果調用KafkaProducer.send
我指的是之前存在的消息這doc
我希望避免將重複郵件發送到卡夫卡主題。驗證卡夫卡主題中是否存在郵件
什麼是實現它的理想方式?
使用Java客戶端對Apache卡夫卡,反正是有驗證,如果調用KafkaProducer.send
我指的是之前存在的消息這doc
目前(卡夫卡0.10.1
),沒有辦法與卡夫卡一起交貨。無論您想要做什麼解決方案,總是會有差距,最終可能會丟失信息或重複信息。
但是,Kafka將添加一個idempotent producer(計劃用於0.10.2
),這將允許您避免重複寫入。 0.10.2
發佈的目標日期是beginning 2017。
這是不切實際的,你檢查是否每次發送新消息時都會發送相同的消息。換種角度來看:您可以用回調函數調用KafkaProducer.send方法,通知您成功或失敗。
此方法不保存。即使在成功的情況下,如果在成功寫入之後但在觸發回調之前生產者發生故障,那麼可能沒有對生產者的回調。需要降低這一點。將添加一個新的答案。 –
這幾乎超出了卡夫卡的範圍。您需要使用不同的存儲來爲隨機訪問提供適當的索引。 根據您的需要,可以是(分佈式)緩存,鍵值存儲或其他。
你可能會想這樣做,對消費端而非生產商,爲不同的消費者可以使用不同的策略進行重複數據刪除(有的消費者可能只是忍受重複)。
問題是關於寫入卡夫卡而不是外部系統。 –
它是從卡夫卡的主題將數據導出到數據庫和查詢,以驗證它的存在是一個好主意? –
您也可以通過消費者閱讀數據來驗證它是否存在。但這是非常昂貴和緩慢的。但是,目前沒有好的解決方案能夠提供良好的性能。你將需要等待冪等生產者。要知道,接受重複寫入並相應地設計下游用戶似乎很好,並在那裏過濾出重複項。 –