我是 Flume 的新手,想在下面的场景中使用 Flume。
我们的系统以 HTTP POST 的形式接收事件,我们需要在 Kafka 中存储它们的副本(用于进一步处理),并将另一个副本存储在 HDFS 中(作为永久存储)。
我们可以将Flume source 配置为HTTP,channel 配置为KAFKA,sink 配置为HDFS 来满足我们的要求。这个解决方案会起作用吗?
最佳答案
如果我理解得很好,您希望 Kafka 作为存储数据的最终后端,而不是 Flume 代理用来通信源和接收器的内部 channel 。我的意思是,Flume 代理基本上由接收数据的源和构建放入 channel 的 Flume 事件组成,以便接收器读取这些事件并对其进行处理(通常,将这些数据保存在最终后端)。因此,根据您的设计,如果您使用 Kafka 作为内部 channel ,它将是一种内部通信 HTTP 源和 HDFS 接收器的方式;但它永远无法从代理外部访问。
为了满足您的需求,您将需要和代理例如:
http_source -----> memory_channel -----> HDFS_sink ------> HDFS
|
|----> memory_channel -----> Kafka_sink -----> Kafka
{.................Flume agent.....................} {backend}
请注意基于内存的 channel 是内部 channel ,它们可以基于内存或文件,甚至在 Kafka 中,但 Kafka channel 将与您将持久化数据的最终 Kafka 不同,并且您的数据可以访问应用程序。
关于hdfs - Flume 用例 : reading from HTTP and push to HDFS via Kafka,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32667179/