Flume之使用Kafka_Channel生产数据至Kafka_Topic

8 篇文章 0 订阅
8 篇文章 0 订阅

前言

  • 操作系统:CentOS 7
  • Java版本:1.8.0_221
  • Flume版本:1.8.0

1. Kafka Channel使用场景

  • 配合Flume Source、Flume Sink使用,为Event的传输提供一种具有高可用的Channel
  • 配合Flume Source和拦截器interceptor使用,无Sink,用于将Flume搜集的Event传输到Kafka集群指定Topic中,便于Kafka消息订阅者使用
  • 配合Flume Sink使用,如HDFS Sink、HBaseSink等,无Source,用于提供一种低延迟、高容错的传输Event方式,直接通过Flume Agent将Kafka中的Event传输给Flume Sink

2. Flume Agent配置示例

  • 此Flume Agent配置文件主要用于启动Agent监控指定日志文件的更新内容,并将其进行简单的过滤、分类和标记,最终输出到对应的Kafka Topic中。其中使用到的Flume组件有TailDir Source、2个自定义拦截器Interceptor、Channel Selector、2个Kafka Channel等
# 此Flume Agent配置文件用于将指定文件的更新内容按照类别使用自定义interceptors打上不同的键值对,并通过
# Channel Selector按照键值对传输给不同的Kafka Channel,最后输出到Kafka集群指定topic中
# TailDir Source -> interceptors -> Channel Selector -> Kafka Channel -> kafka Topic

# Agent
a1.sources = r1
a1.channels = c1 c2
# 不使用Sink(Kafka Channel可以不使用Sink),主要是将数据采集到Kafka中去

# Sources
# a1.sources.r1
a1.sources.r1.type = TAILDIR
# 设置Json文件存储路径(最好使用绝对路径)
# 用于记录文件inode/文件的绝对路径/每个文件的最后读取位置等信息
a1.sources.r1.positionFile = /opt/module/flume-1.8.0/.position/taildir_position.json
# 指定监控的文件组
a1.sources.r1.filegroups = f1
# 配置文件组中的文件
# 设置f1组的监控文件,注意:使用的是正则表达式,而不是Linux通配符
a1.sources.r1.filegroups.f1 = /tmp/logs/app.+
# 设置Event的Header中插入文件绝对路径键值对
a1.sources.r1.fileHeader = true


# Interceptors
# a1.sources.r1.interceptors
a1.sources.r1.interceptors = i1 i2
# 设置自定义的ETL Interceptor拦截器
a1.sources.r1.interceptors.i1.type = com.tomandersen.flume.interceptor.LogETLInterceptor$Builder
# 设置自定义的Log Type Interceptor拦截器
a1.sources.r1.interceptors.i2.type = com.tomandersen.flume.interceptor.LogTypeInterceptor$Builder


# Channel Selector
# a1.sources.r1.selector
a1.sources.r1.selector.type = multiplexing
# 设置Multiplexing Channel Selector根据日志类型发往不同的Channel
a1.sources.r1.selector.header = topic
# 将启动日志发往c1
a1.sources.r1.selector.mapping.topic_start = c1
# 将事件日志发往c2
a1.sources.r1.selector.mapping.topic_event = c2

# Channels
# a1.channels.c1
a1.channels.c1.type = org.apache.flume.channel.kafka.KafkaChannel
# 设置Kafka集群中的Broker
a1.channels.c1.kafka.bootstrap.servers = kafkaServer1:9092,kafkaServer2:9092,kafkaServer3:9092
# 设置a1.channels.c1所使用的Kafka的topic
a1.channels.c1.kafka.topic = topic_start
# 设置成不按照flume event格式解析数据,因为同一个Kafka topic可能有非flume Event类数据传入
a1.channels.c1.parseAsFlumeEvent = false
# # 设置注册的Kafka消费者组,此消费组应该设置成相同,保证同一个消费组中的用户两种数据都能读取
# a1.channels.c1.kafka.consumer.group.id = flume-consumer

# a1.channels.c2
a1.channels.c2.type = org.apache.flume.channel.kafka.KafkaChannel
# 设置Kafka集群中的Broker
a1.channels.c2.kafka.bootstrap.servers = kafkaServer1:9092,kafkaServer2:9092,kafkaServer3:9092
# 设置a1.channels.c1所使用的Kafka的topic
a1.channels.c2.kafka.topic = topic_event
# 设置成不按照flume event格式解析数据,因为同一个Kafka topic可能有非flume Event类数据传入
a1.channels.c2.parseAsFlumeEvent = false
# # 设置注册的Kafka消费者组,此消费组应该设置成相同,保证同一个消费组中的用户两种数据都能读取
# a1.channels.c2.kafka.consumer.group.id = flume-consumer


# Bind
a1.sources.r1.channels = c1 c2

End~

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,我可以回答这个问题。您可以按照以下步骤来使用Flume采集Kafka数据到HDFS和Hive中: 1. 首先,确保您已经安装了FlumeKafka、HDFS和Hive等必要的软件。 2. 然后,在Flume的配置文件中添加Kafka作为Source和HDFS/Hive作为Sink。例如,以下是一个简单的配置文件示例: ``` agent.sources = kafka-source agent.channels = hdfs-channel agent.sinks = hdfs-sink hive-sink agent.sources.kafka-source.type = org.apache.flume.source.kafka.KafkaSource agent.sources.kafka-source.batchSize = 1000 agent.sources.kafka-source.kafka.bootstrap.servers = localhost:9092 agent.sources.kafka-source.kafka.topics = my-topic agent.sources.kafka-source.kafka.consumer.group.id = my-group agent.channels.hdfs-channel.type = memory agent.channels.hdfs-channel.capacity = 10000 agent.channels.hdfs-channel.transactionCapacity = 100 agent.sinks.hdfs-sink.type = hdfs agent.sinks.hdfs-sink.hdfs.path = hdfs://localhost:9000/flume/kafka agent.sinks.hdfs-sink.hdfs.fileType = DataStream agent.sinks.hdfs-sink.hdfs.writeFormat = Text agent.sinks.hdfs-sink.channel = hdfs-channel agent.sinks.hive-sink.type = hive agent.sinks.hive-sink.hive.metastore = thrift://localhost:9083 agent.sinks.hive-sink.hive.database = my-db agent.sinks.hive-sink.hive.table = my-table agent.sinks.hive-sink.hive.partition = dt=%Y-%m-%d agent.sinks.hive-sink.channel = hdfs-channel ``` 在上面的配置文件中,我们使用Kafka作为Source,将数据写入到HDFS和Hive中。我们使用Memory Channel数据缓存在内存中,然后将其写入到HDFS和Hive中。在Hive Sink中,我们还定义了一个分区,以便按日期对数据进行分区。 3. 最后,运行Flume代理以开始从Kafka读取数据并将其写入到HDFS和Hive中。您可以使用以下命令来启动Flume代理: ``` $ bin/flume-ng agent -n agent -c conf -f conf/flume-kafka-hdfs-hive.conf ``` 这样,Flume代理就会开始从Kafka读取数据,并将其写入到HDFS和Hive中。 希望这些信息能够帮助您采集Kafka数据到HDFS和Hive中。如果您有任何其他问题,请随时问我。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值