我有一个现有的Kafka主题和一个从那里读取并写入HDFS的水槽代理。我想重新配置我的水槽代理,这样它就会远离现有的设置;一个Kafka源,文件通道到HDFS接收器,使用Kafka频道。
我在cloudera documentation中读到可以通过仅使用Kafka频道和HDFS接收器(没有水槽源)来实现这一目标..(除非我得到了错误的结束。)所以我试图创建此配置但它不起作用。它甚至没有启动盒子上的水槽过程。
# Test
test.channels = kafka-channel
test.sinks = hdfs-sink
test.channels.kafka-channel.type =
org.apache.flume.channel.kafka.KafkaChannel
test.channels.kafka-channel.kafka.bootstrap.servers = localhost:9092
test.channels.kafka-channel.kafka.topic = test
test.channels.kafka-channel.parseAsFlumeEvent = false
test.sinks.hdfs-sink.channel = kafka-channel
test.sinks.hdfs-sink.type = hdfs
test.sinks.hdfs-sink.hdfs.path = hdfs://localhost:8082/data/test/
我正在使用:
ps -ef | grep flume
只在我添加kafka-source后才返回一个进程,但这不对,因为这样做会为发布到主题上的任何消息创建一个无限循环。是否可以仅使用Kafka频道和HDFS接收器,或者我是否需要使用kafka-source但更改一些其他配置以防止无限循环的消息?
Kafka-source
- > kafka-channel
- > HDFS Sink
- 这对我来说似乎不对。
答案 0 :(得分:1)
在挖了一下之后,我注意到Ambari没有为指定的代理创建任何水槽配置文件。如果我指定test.sources = kafka-source
,Ambari似乎只会创建/更新水槽配置。一旦我将其添加到水槽配置中(通过ambari),就会在盒子上创建配置,并且水槽代理成功启动。
最终的水槽配置看起来像这样:
test.sources=kafka-source
test.channels = kafka-channel
test.sinks = hdfs-sink
test.channels.kafka-channel.type = org.apache.flume.channel.kafka.KafkaChannel
test.channels.kafka-channel.kafka.bootstrap.servers = localhost:9092
test.channels.kafka-channel.kafka.topic = test
test.channels.kafka-channel.parseAsFlumeEvent = false
test.sinks.hdfs-sink.channel = kafka-channel
test.sinks.hdfs-sink.type = hdfs
test.sinks.hdfs-sink.hdfs.path = hdfs:///data/test
注意我没有设置源上的任何属性(这会导致我在我的问题中提到的无限循环问题),只需要提及它以便Ambari创建flume配置并启动代理。
答案 1 :(得分:0)
这并没有直接回答你关于Flume的问题,但总的来说,因为你已经在使用Apache Kafka,所以使用Kafka Connect(它是Apache Kafka的一部分)可以最好地解决这种模式。 每个this guide here都有一个Kafka Connect HDFS连接器,使用简单。