2016-02-02 131 views
12

用例如下: 我有幾個Java應用程序正在運行,它們都必須與不同的(每個都有特定的目標)進行交互。例如,應用程序A使用ElasticSearch的索引A,B,C來查詢和更新。應用程序B使用索引A,C,D(比如說)。Fluentd vs Kafka

需要一些可以管理所有這些數據流的通用接口。目前我正在評估Kafka併爲此目的而流利。 有人可以解釋哪種更適合這種情況。我已經看過卡夫卡和Fluentd的功能,我並不真正瞭解它會在這裏產生的差異。 非常感謝。

回答

29

kafka提供發佈/訂閱消息作爲分佈式提交日誌。通常情況下,您需要在每臺需要生成一些數據的主機上安裝kafka,以便在其他位置轉發數據,並且所有這些主機將一起組成一個羣集。這裏的好處是,如果由於某種原因網絡連接變得不穩定或宕機,您的應用程序可以繼續生成數據/日誌,並且它們不會丟失。而如果您的應用程序直接將日誌發送到某個遠程集中日誌記錄主機,則在網絡停止運行期間可能會丟失一些日誌。

fluentd是一個集中式日誌採集器通常安裝在一臺主機上(或更多,如果您需要水平縮放)。它連接到遠程數據源,應用過濾併發送統一的日誌數據到遠程數據接收器。

從流利的文檔中,您可以看到fluentd也可以是consume data from kafkaproduce data towards kafka。這一點應該暗示,流利和卡夫卡在不同的層面,因爲前者使用後者。實際上,compare fluentd and logstash更合乎邏輯。就fluentd而言,kafka只是另一個數據源和/或數據接收器,但它們完全不同。

如果您想要兩全其美,請使用kafka作爲輸入/輸出數據管道從/到您的應用程序,並使用fluentd(或logstash)作爲您的集中式日誌系統讀取這些kafka主題。

如果您想要了解更多關於這個主題的信息,您可以閱讀fluentd and kafka complement each other如何很好地閱讀它們不會相互競爭。

+4

你先生,是一個傳奇:)非常感謝。 –

+2

謝謝,我總是樂於幫忙;) – Val

+1

爲了大家的利益,可以對問題和答案進行低估的人提供一些評論,說明他爲什麼這樣做。請指教我們;-) – Val