Flume+kafka+zookeeper搭建(多source的flume传输+突破2k的最大每行数据限制)

本文档介绍了如何在三台虚拟机上搭建Flume+kafka+zookeeper环境,详细讲解了配置过程,包括zookeeper和kafka的设置,以及Flume的安装和配置。特别地,讨论了Flume每行数据最大2k的限制问题,并提出了通过修改源码解决这一限制的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先创建三台虚拟机,我的是192.168.100.202,192.168.100.203,192.168.100.204
在这里插入图片描述
所使用的版本信息
在这里插入图片描述
1.确保系统已经安装jdk环境

2.搭建zookeeper

配置环境,刷新环境变量source /etc/profile

写入到jdk配置后就行
export ZK_HOME=/usr/zk/zookeeper-3.4.14
export PATH= Z K H O M E / b i n : ZK_HOME/bin: ZKHOME/bin:PATH

保存退出,刷新配置

Zookeeper配置

[root@localhost zookeeper-3.4.11]# cd conf 进入zk配置
[root@localhost conf]# mv zoo_sample.cfg zoo.cfg 修改名称为zoo.cfg
[root@localhost conf]# vim zoo.cfg

打开配置,修改

dataDir= dataDir=/usr/local/hadoop/zookeeper-3.4.14/data
最下面配置
server.0=192.168.100.202:2888:3888
server.1=192.168.100.203:2888:3888
server.2=192.168.100.204:2888:3888
解释
server.X=A:B:C
X-代表服务器编号
A-代表ip
B和C-代表端口,这个端口用来系统之间通信

保存退出

在这里插入图片描述
下一步配置myid这里需要每个机器中都配置

找到Zookeeper目录,新建data文件夹,并且在data文件夹下面创建一个文件,叫myid,并且在文
件里写入server.X对应的X cd data vim myid
#直接在myid里面写 X 即可
#比如我配置的三个server,myid里面写的X就是所对应的X 如下三台机器分别填写自己对应的server.X server.0=192.168.100.202:2888:3888【192.168.100.202服务器上面的myid填写0】
server.1=192.168.100.203:2888:3888【192.168.100.203服务器上面的myid填写1】
server.2=192.168.100.204:2888:3888【192.168.100.204服务器上面的myid填写2】
保存退出

如192.168.100.204的myid
在这里插入图片描述
启动zookeeper

zkServer.sh start 启动
zkServer.sh status 查看状态

出现follower或者leder标识成功

3.kafka配置
安装kafka解压到自定义文件下,配置环境变量并配置环境变量同zookeeper

修改server.properties
修改log.dirs日志存储地址

/usr/kafka/kafka_2.12-2.20/data/log,这里如果没有需要创建,可自定义
broker.id=1;//三台分别是 1 2 3
zookeeper.connect=192.168.100.202:2181,192.168.100.203:2181,192.168.100.204:2181/kafka

启动kafka

//启动线程并写入日志
kafka-server-start.sh /usr/local/kafka_2.11-0.9.0.1/config/server.properties > /usr/local/kafka_2.11-0.9.0.1/logs/logs/test.log &

test.log自定义文件名称 & 后台运行

三台虚拟机均开启kafka

4.Flume的安装

下载安装包,安装完成之后同样配置环境变量

修改配置文件 cd /usr/flume/conf 使用ll命令查看配置文件夹中的内容。复制配置文件并更改, cp flume-env.sh.template flume-env.sh。 编辑该配置该配置文件 vi flume-env.sh
更改jdk位置
在这里插入图片描述
验证是否安装成功 查看版本信息
在这里插入图片描述
我们使用的是Spool Source的方式,对目录进行监控,然后把监控到的信息通过kafka进行传输.
对应的配置文件为

a1.sources = r1 r2
a1.sinks = k1 k2
a1.channels = c1 c2

#####source
a1.sources.r1.type = spooldir
a1.sources.r1.channels = c1
a1.sources.r1.spoolDir = /usr/local/hadoop/test
a1.sources.r1.fileHeader = true
#####sink
a1.sinks.k1.type = org.apache.flume.sink.kafka.KafkaSink
#设置kafka的主题topic
a1.sinks.k1.topic = kafka_spooldir_test
#设置消费者编码为UTF-8
a1.sinks.k1.custom.encoding=UTF-8
#绑定kafka主机以及端口号
#a1.sinks.k1.kafka.bootstrap.servers = 192.168.100.202:9092,192.168.100.203:9092 a1.sinks.k1.brokerList = 192.168.100.202:9092,192.168.100.203:9092,192.168.100.204:9092
#设置kafka序列化方式
a1.sinks.k1.serializer.class = kafka.serializer.StringEncoder

#use a channel which buffers events in memory
a1.channels.c1.type = memory
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

#####source
a1.sources.r2.type = spooldir
a1.sources.r2.channels = c2
a1.sources.r2.spoolDir = /usr/local/hadoop/mytest
a1.sources.r2.fileHeader = true
#Describe the sink
a1.sinks.k2.type = org.apache.flume.sink.kafka.KafkaSink
#设置kafka的主题topic
a1.sinks.k2.topic = kafka_spooldir_test1
#设置消费者编码为UTF-8
a1.sinks.k2.custom.encoding=UTF-8
#绑定kafka主机以及端口号
#a1.sinks.k1.kafka.bootstrap.servers = 192.168.100.202:9092,192.168.100.203:9092 a1.sinks.k2.brokerList = 192.168.100.202:9092,192.168.100.203:9092,192.168.100.204:9092
#设置kafka序列化方式 a1.sinks.k2.serializer.class = kafka.serializer.StringEncoder
#####channels
a1.channels.c2.type = memory
a1.channels.c2.capacity = 1000
a1.channels.c2.transactionCapacity = 100

#Bind the source and sink to the channel
a1.sources.r2.channels = c2
a1.sinks.k2.channel = c2

使用命令,启动flume agent

flume-ng agent -n a1 -c …/conf/ -f kafka_spool.conf -Dflume.root.logger=INFO,console

打开kafka的消费者对kafka_spooldir_test 和kafka_spooldir_test1这两个topic进行消费,即可以对响应目录下的文件内容进行监听,一个文件的一行内容会发出kafka的消息,flume默认一条消息的大小是2k,当我们所需的一条消息大小大于2k时,flume将分作两条进行发送,这样不利于消息的解析.找到flume源码包org\apache\flume\serialization类
在这里插入图片描述

因此,接下来就可以修改源码,将上面代码中的2048,改成更大的值,更改完成之后,可以用maven编译然后替换flume/lib里面的flume-ng-core包
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值