目录

准备工作

Flume整合Kafka

        第一步:解压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相关配置。

        第五步:修改Flume所在服务器的/etc/hosts文件

测试一下

        测试环境说明

        测试流程说明

        测试开始


这里的山路十八弯~这里的水路九连环~


软硬件环境说明
        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.18Kafka单点服务器
10.8.109.36Flume单点服务器
Windows10Java程序A(消费Kafka消息)
Windows10Java程序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成功

 

声明:本文为学习笔记,学习自51CTO,《Kafka消息中间件》,讲师李兴华。

^_^ 如有不当之处,欢迎指正

^_^ 学习视频:
             
《Kafka消息中间件》,讲师李兴华

^_^ 参考链接:
              
http://flume.apache.org/releases/content/1.9.0/FlumeUserGuide.html

^_^ 测试代码托管链接:
              
https://github.com/JustryDeng/CommonRepository

^_^ 本文已经被收录进《程序员成长笔记(四)》,笔者JustryDeng

Logo

Kafka开源项目指南提供详尽教程,助开发者掌握其架构、配置和使用,实现高效数据流管理和实时处理。它高性能、可扩展,适合日志收集和实时数据处理,通过持久化保障数据安全,是企业大数据生态系统的核心。

更多推荐