一、前置准备

CentOS7、jdk1.8、flume-1.9.0、zookeeper-3.5.7、kafka_2.11-2.4.1


二、目标

这里我们监听​​/home/xiaokang/docker_teach​​​目录下 ​​kafka.log​​​ (自己提前创建好)文件,当文件内容有变化时,将新增加的内容发送到 Kafka 的 ​​flume2kafka​​ 主题中。其中 Flume 中涉及到 Exec Source 、Memory Channel 、Kafka Sink。

三、整合步骤

3.1 启动Zookeeper和Kafka

这里采用单节点的 Kafka 和Zookeeper集群:

#启动Zookeeper集群
[xiaokang@hadoop docker_teach]$ sudo docp up -d
[xiaokang@hadoop docker_teach]$ sudo docp start
#启动Kafka
[xiaokang@hadoop docker_teach]$ kafka-server-start.sh -daemon /opt/software/kafka-2.4.1/config/server.properties

3.2 创建主题

创建一个主题 ​​flume2kafka​​,之后 Flume 收集到的数据都会发到这个主题上:

#创建主题
[xiaokang@hadoop docker_teach]$ kafka-topics.sh --create --zookeeper hadoop:2181 --topic flume2kafka --partitions 1 --replication-factor 1

#查看创建的主题
[xiaokang@hadoop docker_teach]$ kafka-topics.sh --zookeeper hadoop:2181 --list

3.3 启动kafka消费者

启动一个消费者,监听我们刚才创建的 ​​flume2kafka​​ 主题:

[xiaokang@hadoop ~]$ kafka-console-consumer.sh --bootstrap-server hadoop:9092 --topic flume2kafka

3.4 配置Flume

新建配置文件 ​​flume-kafka.properties​​,文件内容如下:

#指定agent的sources、channels、sinks
a1.sources = s1
a1.channels = c1
a1.sinks = k1

#配置source属性
a1.sources.s1.type = exec
a1.sources.s1.command = tail -f /home/xiaokang/docker_teach/kafka.log

#配置channel类型
a1.channels.c1.type = memory
a1.channels.c1.capacity = 10000
a1.channels.c1.transactionCapacity = 100

#配置sink
#设置Kafka接收器
a1.sinks.k1.type = org.apache.flume.sink.kafka.KafkaSink
#设置Kafka地址
a1.sinks.k1.kafka.bootstrap.servers = hadoop:9092
#设置发送到Kafka上的主题
a1.sinks.k1.kafka.topic = flume2kafka
#设置一批中消息的条数
a1.sinks.k1.kafka.flumeBatchSize = 6
#0代表不需要等待确认,1代表仅需要leader确认,-1代表所有副本确认
a1.sinks.k1.kafka.producer.acks = 1
#设置 linger.ms=1,将达到减少发送的请求数量的效果,但对于在没有负载情况,将增加1ms的延迟。
a1.sinks.k1.kafka.producer.linger.ms = 1

#将sources和channels绑定
a1.sources.s1.channels = c1

#将sinks和channels绑定
a1.sinks.k1.channel = c1

3.5 启动Flume

[xiaokang@hadoop docker_teach]$ nohup flume-ng agent -n a1 -c /opt/software/flume-1.9.0/conf/ -f ./flume-kafka.properties -Dflume.root.logger=INFO,console &>>flume-ng.out 2>&1 &

3.6 测试

向监听的 ​​/home/xiaokang/docker_teach/kafka.log​​ 文件中追加内容,查看 Kafka 消费者的输出:

可以看到 ​​flume2kafka​​ 主题的消费端已经收到了对应的消息:

Flume 整合 Kafka_大数据