2016-06-07 103 views
1

因此,我的僱主通過卡夫卡的Avro消息。我們希望將所有郵件歸檔到Amazon S3。理想情況下,他們將一天被存儲在S3樣目錄,並使用通路結構是這樣的:Avro Records - > Kafka - > Kafka Connect Sink - > Amazon S3 Storage。冪等?

S3://my-bucket/data/day=2016-03-04/data.avro

如何做到這一點有沒有參考或最佳實踐?

我的一個問題是冪等性:如何提供寫冪等性,其中記錄可能會多次發送到我的接收器作家,但只能存儲在S3上一次。

我是否正確,我需要冪等性?如果我實現了一個簡單的追加(非冪等),Kafka Connect可能會發送兩次相同的記錄,並且它們可能會冗餘存儲?

回答

4

AFAIK,你不能追加到S3對象(文件):https://news.ycombinator.com/item?id=10746969 - 除非有非常最近改變了....

你也不想保留單獨寫每個事件到S3,而是做批量 - 出於明顯的性能原因。

所以,我們做事的方式 - 是使用卡桑德拉作爲中間存儲來收集一些時間(時間片)事件 - 儲存他們被事件分組倍,不處理時間 - 然後寫那些定期觸及到S3的時間片。一個時間片將被存儲到一個S3對象中 - 時間片信息是文件名的一部分。

如果/當更多的事件發生在某些過去的時間片上 - 它被添加到Cassandra的時間片表中,並且最終觸發對S3的重寫 - 這將再次獲得該時間片的所有事件並寫入S3具有相同的文件名,有效覆蓋現有文件(如果有的話)。

您必須決定您想要在卡桑德拉保留數據多長時間 - 根據您的管道工作方式以及傳入事件的「舊」情況。

這就是我們如何實現冪等性。這可能不是最有效的方式 - 但它對我們來說效果很好,因爲我們有非常高的事件處理量和速度,而Cassandra非常適合快速寫入。

我很想聽聽其他人如何解決類似的問題!

2

爲什麼不使用類似secor的東西?它也爲一次交付提供了一些保證。

你也可以考慮基於「kafka connect」的實現,如streamx

0

從描述,它看起來像你正在尋找的是 1)Avro的數據寫入到S3

2)數據同時寫入到S3

3分區)恰好一次支持。

Qubole StreamX支持豐富多樣的格式轉換,其中包括數據分區和其中之一。 而且,我們正在準備一次即將推出的產品。

secor正在被棄用(在他們對谷歌組的反應之一中提到),它也不支持avro。

所以你可以使用qubole streamx開始。

相關問題