如何在不指定来源的情况下使用 Flume 的 Kafka Channel

How to use Flume's Kafka Channel without specifying a source

我有一个现有的 Kafka 主题和一个从那里读取并写入 HDFS 的 flume 代理。我想重新配置我的 flume 代理,以便它脱离现有设置;一个 Kafka 源,文件通道到 HDFS 接收器,使用 Kafka 通道。

我在 cloudera documentation 中读到,仅使用 Kafka 通道和 HDFS 接收器(没有 flume 源)就可以实现这一点。(除非我弄错了棒。)所以我尝试创建此配置,但它不起作用。它甚至没有在盒子上启动 flume 过程。

# 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/

我正在使用:

是否可以只使用 Kafka Channel 和 HDFS Sink,或者我是否需要使用 kafka-source 但更改一些其他配置以防止消息无限循环?

Kafka-source -> kafka-channel -> HDFS Sink - 这对我来说似乎不对。

这不会直接回答您关于 Flume 的问题,但总的来说,由于您已经在使用 Apache Kafka,因此最好使用 Kafka Connect(它是 Apache Kafka 的一部分)解决此模式。 根据 this guide here.

,有一个易于使用的 Kafka Connect HDFS 连接器

仔细研究后,我注意到 Ambari 没有为指定的代理创建任何 flume conf 文件。如果我指定 test.sources = kafka-source,Ambari 似乎只 create/update flume 配置。一旦我将它添加到 flume 配置中(通过 ambari),配置就在盒子上创建并且 flume 代理成功启动。

最终的 flume 配置如下所示:

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 配置和启动代理。