2015-09-19 76 views
4

我是Flume的新用戶,並且想在以下場景中使用Flume。Flume用例:從HTTP讀取並通過Kafka推送到HDFS

我們的系統接收事件作爲HTTP POST,我們需要將它們的副本存儲在Kafka(用於進一步處理)以及HDFS中另一個副本(作爲永久存儲)。

我們可以將Flume源配置爲HTTP,信道爲KAFKA,接收器爲HDFS以符合我們的要求。此解決方案是否有效?

回答

0

如果我理解的很好,您希望Kafka作爲最後端存儲數據,而不是Flume代理程序用於溝通源和接收器的內部通道。我的意思是,Flume代理基本上是接收數據並構建Flume事件的源的組成部分,這些事件放入頻道以便接收器讀取這些事件並對它們執行某些操作(通常是將這些數據保留在最後面的後端)。因此,根據你的設計,如果你使用Kafka作爲內部通道,那將是一種溝通HTTP源和HDFS接收器的內部方式;但永遠不會從代理外部訪問。

爲了滿足您的需求,您需要和劑,如:

http_source -----> memory_channel -----> HDFS_sink ------> HDFS 
      | 
      |----> memory_channel -----> Kafka_sink -----> Kafka 

{.................Flume agent.....................}  {backend} 

請遵守基於存儲的渠道是內部的,它們可以根據內存或文件,即便是在卡夫卡,但卡夫卡頻道將不同於最終的卡夫卡,您將堅持數據,並可通過您的應用程序訪問。

+0

感謝您的澄清。同意您使用兩個接收器的意見。有一件我不明白的事情是'但它永遠不會從代理商之外訪問'。當我們提供Kafka集羣時,代理外部可以訪問這個集羣,對嗎?請澄清。 –

+0

嗯,你是對的。由於Kafka頻道基於您自己的羣集,因此完全可以訪問。儘管如此,這將是罕見的使用Flume,我的意思是說,您可以避開第二個接收器,並基於Kafka直接訪問此內部通道中的數據(同時,HDFS接收器將使用此數據作爲數據存儲目的)。但我寧願擁有2個基於內存的內部頻道,並將Kafka視爲最終後端,而不是內部頻道。我會解決我的答案。 – frb

+0

事實上,您可以非常好地使用Kafka作爲頻道,讓消費者從頻道主題中檢索消息。 Kafka單獨處理偏移量(取決於客戶端的類型),並且只在消息的TTL達到時才刪除數據。 –

相關問題