目录
第一步:解压kafka_2.11-2.1.0.tgz文件,将kafka-clients-2.1.0.jar包拷贝至Flume安装目录下的lib文件夹中。
第二步:在flume安装目录下的conf文件夹下创建一个jaas配置文件kafka_client_jaas.conf。
第三步:修改Flume安装目录下的conf文件夹下的环境配置文件flume-env.sh.template。
第四步:修改flume.conf文件,追加Kafka相关配置。
这里的山路十八弯~这里的水路九连环~
软硬件环境说明:
Windows10、IntelliJ IDEA、SpringBoot 2.1.3.RELEASE、apache-flume-1.9.0-bin.tar.gz、kafka_2.11-2.1.0.tgz。
准备工作:
准备好kafka(单点或集群都行)以及Flume(单点或集群都行)。
注:Kafka单点的安装可参考;
Kafka集群的搭建也非常简单,这里不再给出,可自行查阅相关资料;
Flume单点或集群的搭建也非常简单,这里不再给出,可自行查阅相关资料;
Flume整合Kafka:
第一步:解压kafka_2.11-2.1.0.tgz文件,将kafka-clients-2.1.0.jar包拷贝
至Flume安装目录下的lib文件夹中。
拷贝至:
第二步:在flume安装目录下的conf文件夹下创建一个jaas配置
文件kafka_client_jaas.conf。
给出文字版(方便拷贝):
KafkaClient {
org.apache.kafka.common.security.plain.PlainLoginModule required
username="bob"
password="bob-pwd";
};
注:因为我Kafka采用了Kerberos认证,所以Flume要整合Kafka的话,必须的有jaas。
注:kafka_client_jaas.conf文件的内容中的用户与密码,必须是Kerberos认证时配置有的用户,可
详见https://blog.csdn.net/justry_deng/article/details/88386114。
第三步:修改Flume安装目录下的conf文件夹下的环境配置文
件flume-env.sh.template。
- 拷贝一份环境配置文件:
指令:
cp conf/flume-env.sh.template conf/flume-env.sh
执行效果如图:
- 在flume-env.sh文件中追加相应的Kafka配置项:
指令:
vim flume-env.sh
内容:
export JAVA_OPTS="$JAVA_OPTS -Djava.security.auth.login.config=/var/local/flume/conf/kafka_client_jaas.conf"
执行效果如图:
注:要指向对应kafka_client_jaas.conf文件所在的位置。
第四步:修改flume.conf文件,追加Kafka相关配置。
mple.conf: A single-node Flume configuration
# Name the components on this agent
a1.sources = r1
a1.sinks = k1
a1.channels = c1
# Describe/configure the source
a1.sources.r1.type = avro
a1.sources.r1.bind = flume-single
a1.sources.r1.port = 44444
# Describe the sink
# a1.sinks.k1.type = logger
# 指定sink类型为KafkaSink
a1.sinks.k1.type = org.apache.flume.sink.kafka.KafkaSink
# Use a channel which buffers events in memory
# a1.channels.c1.type = memory
# 使用kafka操作处理通道
a1.channels.c1.type = org.apache.flume.channel.kafka.KafkaChannel
# 指定kafka (集群的话,中间使用逗号隔开,如:kafka-1:9092,kafka-2:9092,kafka-3:9092)
a1.channels.c1.kafka.bootstrap.servers = kafka-single:9095
# kafka主题
a1.channels.c1.kafka.topic = kafka-flume-topic
# kafka访问协议
a1.channels.c1.kafka.producer.security.protocol = SASL_PLAINTEXT
a1.channels.c1.kafka.producer.sasl.mechanism = PLAIN
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100
# Bind the source and sink to the channel
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1
注:上述配置可直接去官网http://flume.apache.org/releases/content/1.9.0/FlumeUserGuide.html#kafka-channel上
复制模板,然后进行修改。
第五步:修改Flume所在服务器的/etc/hosts文件
注:主要是第四步中直接写的是kafka-single所以我们需要在hosts文件中指定该主机名对应的ip。
测试一下:
测试环境说明:
机器 | 应用及说明 |
---|---|
10.8.109.18 | Kafka单点服务器 |
10.8.109.36 | Flume单点服务器 |
Windows10 | Java程序A(消费Kafka消息) |
Windows10 | Java程序B(推送消息至Flume) |
测试流程说明:
测试开始:
第一步:启动10.8.109.18上的kafka、启动kafka消费者、启动10.8.109.36上的flume。
后台启动kafka内置的zookeeper:
# 前台启动
/var/local/kafka/bin/zookeeper-server-start.sh /var/local/kafka/config/zookeeper.properties
# 后台启动
/var/local/kafka/bin/zookeeper-server-start.sh /var/local/kafka/config/zookeeper.properties > /usr/data/zookeeper.log 2>&1 &
后台启动kafka:
# 前台启动
/var/local/kafka/bin/kafka-server-start.sh /var/local/kafka/config/server.properties
# 后台启动
/var/local/kafka/bin/kafka-server-start.sh /var/local/kafka/config/server.properties > /usr/data/kafka.log 2>&1 &
启动kafka消费者(即:启动程序A):
注:具体程序可参考https://blog.csdn.net/justry_deng/article/details/88387898,这里不再给出。需要注意的是:消
费者消费的主题需要改为kafka-flume-topic(或至少含有主题kafka-flume-topic)。
启动10.8.109.36上的flume:
# 前台启动
/var/local/flume/bin/flume-ng agent --conf /var/local/flume/conf/ --conf-file /var/local/flume/conf/flume.conf --name a1 -Dflume.root.logger=INFO,console
# 后台启动
nohup /var/local/flume/bin/flume-ng agent --conf /var/local/flume/conf/ --conf-file /var/local/flume/conf/flume.conf --name a1 -Dflume.root.logger=INFO,console >/flume.log &
第二步:运行程序B测试类,进行日志推送。
注:可详见https://blog.csdn.net/justry_deng/article/details/88388748,这里不再给出。
测试类的控制台输出:
此时,可以看见Kafka消费者(即:程序A)在控制台输出了:
由此可见,Flume整合Kafka成功!