Flume之使用Kafka_Channel消费数据至HDFS

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,并将其中的消息传输至HDFS中,并按照指定时间间隔滚动生成HDFS文件夹和文件。其中主要使用的Flume组件有2个Kafka Channel、2个HDFS Sink等
# 此配置文件主要用于将Kafka中的启动日志和用户行为数据输出到HDFS中
# Kafka Channel->HDFS Sink

# Agent
a1.channels = c1,c2
a1.sinks = k1,k2

# Channels.c1
# 设置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
# 设置消费者组,保证每次消费时能够获取上次对应的Offset
a1.channels.c1.kafka.consumer.group.id = flume-consumer-group
# 设置消费过程poll()超时时间(ms)
a1.channels.c1.pollTimeout = 1000

# Channels.c2
# 设置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.c2使用的Kafka的Topic
a1.channels.c2.kafka.topic = topic_event
# 设置成不按照flume event格式解析数据,因为同一个Kafka topic可能有非flume Event类数据传入
a1.channels.c2.parseAsFlumeEvent = false
# 设置消费者组,保证每次消费时能够获取上次对应的Offset
a1.channels.c2.kafka.consumer.group.id = flume-consumer-group
# 设置消费过程poll超时时间(ms)
a1.channels.c2.pollTimeout = 1000

# Sinks.k1
# 配置HDFS Sink
a1.sinks.k1.type = hdfs
# 设置hdfs文件路径,同时并设置了按照日期创建文件夹(存储启动日志)
a1.sinks.k1.hdfs.path = /logs/topic_start/%Y-%m-%d/%H-%M-%S
# 设置flume创建的hdfs文件前缀(表示启动日志)
a1.sinks.k1.hdfs.filePrefix = start-logs-

# 以下三组参数的配置用于控制flume在hdfs中生成文件的滚动方式
# 满足以下三者中任何一个条件都会新生成hdfs文件
# 设置文件滚动的时间间隔,单位(second),置0表示关闭
a1.sinks.k1.hdfs.rollInterval = 10
# 设置文件滚动的最大size阈值,由于是hdfs sink故最好设置成Block Size的倍数
# 本次实验的hadoop版本为2.7.7(2.7.3之后默认Block Size为128MB,之前为64MB)
# 单位(bytes),置0表示关闭
a1.sinks.k1.hdfs.rollSize = 134217700
# 设置滚动文件存储的最大Event个数
# 此参数一般设置为0,即关闭,除非有严格生产需求并且知道Event大小能够自主控制
a1.sinks.k1.hdfs.rollCount = 0

# 设置flume每批次刷到hdfs中的Event个数(超过一定时长也会进行刷新,并非要等满一批次)
a1.sinks.k1.hdfs.batchSize = 100

# 设置hdfs文件格式,目前只支持(SequenceFile/DataStream/CompressedStream)
# 其中CompressedStream类型需要配合hdfs.codeC参数来指定具体的压缩方式
# SequenceFile表示按照序列文件的方式进行压缩,而DataStream则表示不进行压缩
a1.sinks.k1.hdfs.fileType = DataStream

# 以下三组参数的配置配合转义序列(如%y %m %d %H %M %S等)能够自定义时间轮转最小刻度
# 设置hdfs时间四舍五入,四舍五入的界限为(roundValue*roundUnit),本次设置的以30s为界限
# 注:通常理解的四舍五入以5为界限
# 设置四舍五入之后文件夹将按照一定时间大小的刻度进行创建文件夹
# 否则都是按照之前设置每分钟进行文件夹的创建
a1.sinks.k1.hdfs.round = true
# 设置hdfs时间四舍五入的最小单元倍数
a1.sinks.k1.hdfs.roundValue = 30
# 设置hdfs时间四舍五入的最小单位
a1.sinks.k1.hdfs.roundUnit = second

# 设定是否使用本地时间戳,默认为false,即使用Event的Header中的时间戳,但本次实验中Event-Header为空
a1.sinks.k1.hdfs.useLocalTimeStamp = true

# Sinks.k2
# 配置HDFS Sink
a1.sinks.k2.type = hdfs
# 设置hdfs文件路径,同时并设置了按照日期创建文件夹(存储事件日志)
a1.sinks.k2.hdfs.path = /logs/topic_event/%Y-%m-%d/%H-%M-%S
# 设置flume创建的hdfs文件前缀(表示事件日志)
a1.sinks.k2.hdfs.filePrefix = event-logs-

# 以下三组参数的配置用于控制flume在hdfs中生成文件的滚动方式
# 满足以下三者中任何一个条件都会新生成hdfs文件
# 设置文件滚动的时间间隔,单位(second),置0表示关闭
a1.sinks.k2.hdfs.rollInterval = 10
# 设置文件滚动的最大size阈值,由于是hdfs sink故最好设置成Block Size的倍数
# 本次实验的hadoop版本为2.7.7(2.7.3之后默认Block Size为128MB,之前为64MB)
# 单位(bytes),置0表示关闭
a1.sinks.k2.hdfs.rollSize = 134217700
# 设置滚动文件存储的最大Event个数
# 此参数一般设置为0,即关闭,除非有严格生产需求并且知道Event大小能够自主控制
a1.sinks.k2.hdfs.rollCount = 0

# 设置flume每批次刷到hdfs中的Event个数(超过一定时长也会进行刷新,并非要等满一批次)
a1.sinks.k2.hdfs.batchSize = 100

# 设置hdfs文件格式,目前只支持(SequenceFile/DataStream/CompressedStream)
# 其中CompressedStream类型需要配合hdfs.codeC参数来指定具体的压缩方式
# SequenceFile表示按照序列文件的方式进行压缩,而DataStream则表示不进行压缩
a1.sinks.k2.hdfs.fileType = DataStream

# 以下三组参数的配置配合转义序列(如%y %m %d %H %M %S等)能够自定义时间轮转最小刻度
# 设置hdfs时间四舍五入,四舍五入的界限为(roundValue*roundUnit),本次设置的以30s为界限
# 注:通常理解的四舍五入以5为界限
# 设置四舍五入之后文件夹将按照一定时间大小的刻度进行创建文件夹
# 否则都是按照之前设置每分钟进行文件夹的创建
a1.sinks.k2.hdfs.round = true
# 设置hdfs时间四舍五入的最小单元倍数
a1.sinks.k2.hdfs.roundValue = 30
# 设置hdfs时间四舍五入的最小单位
a1.sinks.k2.hdfs.roundUnit = second

# 设定是否使用本地时间戳,默认为false,即使用Event的Header中的时间戳,但本次实验中Event-Header为空
a1.sinks.k2.hdfs.useLocalTimeStamp = true

# Binding
a1.sinks.k1.channel = c1
a1.sinks.k2.channel = c2

End~

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以回答这个问题。您可以按照以下步骤来使用Flume采集Kafka数据HDFS和Hive中: 1. 首先,确保您已经安装了FlumeKafkaHDFS和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中。如果您有任何其他问题,请随时问我。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值