如何在Flume 1.7中编写自定义ES接收器

时间:2017-03-01 11:57:13

标签: flume agent

在Flume代理中,我收集了Kafka主题中的元素,我需要将它们插入ES中。但是我需要在接收器中执行先前的消化过程,因此我需要编写一个自定义接收器以将数据从代理的通道传递到java消化模块(我已经编写过)。

任何人都可以与我分享自定义接收器的模板并可以用作参考吗? Flumes官方网站对此主题并未说太多: 启动Flume代理时,自定义接收器的类及其依赖项必须包含在代理程序的类路径中。自定义接收器的类型是其FQCN。 https://flume.apache.org/FlumeUserGuide.html#custom-sink

一旦自定义接收器准备就绪,我如何链接以下三个文件以使代理工作:

  • 自定义接收器
  • 摄取jar(用于执行摄取过程的java模块)
  • FlumeAgent.properties

感谢您的任何反馈。我将在完成此任务后立即添加信息。

1 个答案:

答案 0 :(得分:1)

希望您尝试使用Flume从Kafka(源)接收事件并使用您已有的一些数据处理逻辑将其转发到ES(接收器)。

根据这种理解,我建议你研究一下Flume拦截器,它负责在发送到Sink之前改变/过滤事件。

因此,改变事件的所有业务逻辑都可以作为自定义拦截器实现,并且应该配置为Flume通道。

作为参考,您可以查看已有的native interceptors source code。这应该可以让你了解Flume拦截器框架。

以下是ES Sink source code

示例Flume配置

a1.sources = kafkaSource
a1.sinks = ES_Sink
a1.channels = channel1

a1.sources.kafkaSource.interceptors = i1
a1.sources.kafkaSource.interceptors.i1.type = org.apache.flume.interceptor.<Custom_Interceptor_name>$Builder

a1.sinks.ES_Sink.channel = channel1
a1.sinks.ES_Sink.type = elasticsearch
a1.sinks.ES_Sink.hostNames = 127.0.0.1:9200