2016-11-20 149 views
1

我需要獲取從卡夫卡主題的消息,並通過基於HTTP的API通知其他系統。也就是說,從主題獲取消息,映射到第三方API並調用它們。我打算爲此寫一個卡夫卡連接器。卡夫卡連接或卡夫卡客戶

對於這種使用情況,是卡夫卡連接正確的選擇,或者我應該與卡夫卡的客戶端去。

回答

1

Kafka Connect可以很好地用於這個目的,但這也是一個非常簡單的用戶應用程序,因爲消費者也具有容錯性/可伸縮性的好處,在這種情況下,您可能只是在做簡單的消息在每個消費者實例中進行時間處理。你也可以很容易地使用enable.auto.commit這個應用程序,所以你不會遇到直接使用消費者的棘手部分。你與使用消費者在這種情況下將是連接器可以由通用於不同的輸入格式使用卡夫卡連接主要的東西會給,但可能不是一個自定義連接器對你很重要。

1

卡夫卡客戶端時,你有你的代碼的完全控制,你是專家開發者,你希望將應用程序連接到卡夫卡,並可以修改應用程序的代碼。

push data into Kafka 

pull data from Kafka. 

https://cwiki.apache.org/confluence/display/KAFKA/Clients


卡夫卡連接時,你沒有對第三方代碼卡夫卡和你有卡夫卡連接到您不能修改代碼數據存儲新的控制。

卡夫卡連接的範圍窄:它僅着眼於流數據複製到從卡夫卡和不處理其他任務。

http://docs.confluent.io/2.0.0/connect/


我加入幾行形成其他的博客,解釋差異

希望採取卡夫卡寫一堆代碼來發布他們的數據流的公司。我們從經驗中學到的是,正確地做到這一點比看起來更爲複雜。特別是,有一系列的問題,每一個連接器必須解決:

•架構管理:數據管道的攜帶模式信息,其中它是可用的能力。在沒有這種能力的情況下,你最終不得不重建下游。此外,如果同一數據有多個消費者,則每個消費者都必須重新創建它。我們將在未來的博客文章中介紹數據管道的模式管理的細微差別。

•容錯性:運行過程的幾個實例,是有彈性的,以失敗

•並行:橫向擴展來處理大型數據集

•延遲:採集,運輸和處理數據的實時,從而擺脫每日一次的數據轉儲。

•傳遞語義:提供了強有力的保證,當機器發生故障或者進程崩潰

•操作和監視:監視每一個數據整合過程中的健康和進度一致的方式

這些都是真的很難的問題他們自己的權利,在每個連接器中單獨解決它們是不可行的。相反,您希望單個基礎架構平臺連接器可以構建在一起,以一致的方式解決這些問題。

直到最近,採用卡夫卡進行數據集成需要大量開發人員的專業知識;開發需要構建在客戶端API上的Kafka連接器。

https://www.confluent.io/blog/announcing-kafka-connect-building-large-scale-low-latency-data-pipelines/

0

你應該使用卡夫卡當您使用卡夫卡連接片連接源生產的消息到一個特定的主題。

例如,當你使用文件源時,你應該使用文件接收器來消耗已經產生的源。或者當你使用jdbc-source時,你應該使用jdbc-sink來消費你已經生成的東西。

因爲生產者和匯消費者的模式應該是兼容的,那麼你應該在雙方使用兼容的源和匯。

如果在某些情況下模式不兼容,您可以使用從kafka版本10.2開始添加的SMT(簡單消息轉換)功能,並且您將能夠編寫消息轉換程序以在不兼容的生產者和消費者之間傳輸消息。

注意:如果您想更快地傳輸郵件,我建議您使用avro和模式註冊表來更有效地傳輸郵件。

如果你可以用java代碼,你可以使用java kafka流,Spring-Kafka項目或流處理來實現你想要的。