从kafka到Flume 用Python发送消息到kafka-flume

一、Flume安装

我们使用ssh连接工具Termora进行连接,连接成功后,切换到home目录创建一个hadoop的文件夹。mkdir hadoop

打开SFTP。注意,Termora的连接这一步在我的上一篇文章有详细教程,这里不多赘述,不会的小伙伴可以前往我的上一篇文章学一下~当然啦,有的人用Xshell或者FinalShell连接也是可以的,这个看个人喜好。

Termora连接教程博客:

https://blog.youkuaiyun.com/luoying189/article/details/153841667

将右边的/root切换到/home/hadoop目录下,然后把flume的压缩包拉到右边来

回到第一台连接(数据采集)确定目录下有flume的压缩包

解压 tar -zxvf apache-flume-1.11.0-bin.tar.gz 

cd 进去flume 

cd apache-flume-1.11.0-bin/

接着输入命令,出现版本号则证明安装成功

./bin/flume-ng version



如果有小伙伴在这里安装失败,可能是jdk没有配好。

需要配置jdk,建议选择jdk1.8适配,自行到官网下载。文件上传解压跟flume的步骤差不多。不同的是要加入环境变量

输入命令 nano ~/.bashrc

到最下面去添加环境变量,注意jdk解压后重命名一下哈(mv 你的jdk jdk),注意JAVA_HOME的jdk路径和你自己的路径一致哦

export JAVA_HOME=/usr/local/jdk

export PATH=${JAVA_HOME}/bin:$PATH

保存退出,再输入命令生效source ~/.bashrc

最后 javac验证一下

再次输入命令./bin/flume-ng version

出现版本号就好啦,然后

cd /home/hadoop/apache-flume-1.11.0-bin/conf/

nano log4j2.xml

增加一行 

<AppenderRef ref="Console" />

二、Flume的使用(学习)

这一步仅仅练习测试~~知道flume怎么用的,如果熟悉的小伙伴可以跳过,进入下一标题。

我们在flume目录cd进入conf,再在其conf目录下新建一个文件

touch example.conf

输入命令编辑文件

nano example.conf

将下面这段粉色的复制到example.conf文件里面,然后ctrl+x,输入y,再enter一下保存

#设置Agent上的各组件名称

a1.sources = r1

a1.sinks = k1

a1.channels = c1

#配置Source

a1.sources.r1.type = netcat

a1.sources.r1.bind = localhost

a1.sources.r1.port = 44444

#配置Sink

a1.sinks.k1.type = logger

#配置Channel

a1.channels.c1.type = memory

a1.channels.c1.capacity = 1000

a1.channels.c1.transactionCapacity = 100

#SourceSink绑定到Channel

a1.sources.r1.channels = c1

a1.sinks.k1.channel = c1

接着cd.. (注意有两个点)回到flume目录,输入命令:

./bin/flume-ng agent --conf ./conf --conf-file ./conf/example.conf --name a1 -Dflume.root.logger = INFO,console

我们再开一个连接终端,点击克隆

在第二台终端连接,输入命令:nc localhost 44444

写点东西上去

回到第一台终端连接,下面出现了你写的东西,成功~

到了这里,相信你已经成功掌握如何使用flume了~让我们继续

三、kafka安装、配置和启动

 kafka官网下载:kafka.apache.org/downloads

点击右上角的文件图标(SFTP)

这里在右边的/root,修改为/home切换到home路径

找到你的kafka压缩包的位置,拖到右边上传

 上传完就是这样回到连接这里,cd到home目录,ls查看一下压缩包是不是存在

解压kafka, tar -zxvf kafka_2.12-3.6.1.tgz -C /usr/local/

解压完后cd到/usr/local/查看,重命名一下,mv kafka_2.12-3.6.1/ kafka

然后ls查看一下

cd 进入kafka 

cd kafka

拷贝一份配置文件 

cp config/kraft/server.properties config/kraft/server-local.properties

然后 查看一下,出现这四个就可以了

ls config/kraft/

接着,我们编辑local配置文件

nano config/kraft/server-local.properties

确保你的配置文件这几个部分和我的一致~

接着,在kafka的根目录生成UUID,echo查看一下

CLUSTER_ID=$(bin/kafka-storage.sh random-uuid)

echo $CLUSTER_ID

用id格式化一下

bin/kafka-storage.sh format -t $CLUSTER_ID -c config/kraft/server-local.properties

最后,启动kafka,验证kafka启动成功,可以监听9092 9093端口(这是kafka的端口号)

bin/kafka-server-start.sh -daemon config/kraft/server-local.properties

ss -lntp | grep 909

四、配置Flume

接下来,我们cd回去flume目录下的conf目录,创建一个flume的配置文件

cd /home/hadoop/apache-flume-1.11.0-bin/conf

touch kafka_flume.conf

编辑配置文件

nano kafka_flume.conf

将下面粉色部分写入配置文件

# flume.conf —— Kafka(普通字符串/JSON文本) -> 本地滚动文件

agent.sources = kafka-source
agent.channels = memory-channel
agent.sinks = file-sink

# ---- Source: Kafka ----
agent.sources.kafka-source.type = org.apache.flume.source.kafka.KafkaSource
agent.sources.kafka-source.kafka.bootstrap.servers = localhost:9092
# 二选一:用具体topic,或用正则
agent.sources.kafka-source.kafka.topics = your-kafka-topic
# agent.sources.kafka-source.kafka.topics.regex = ^log-.*

# 消费组与位点策略(新组想从头读就 earliest;已有位点不会回溯)
agent.sources.kafka-source.kafka.consumer.group.id = your-consumer-group
agent.sources.kafka-source.kafka.consumer.auto.offset.reset = earliest

agent.sources.kafka-source.batch.size = 100
agent.sources.kafka-source.batch.timeout = 1000
# 如果你的 Kafka 消息不是“Flume JSON 事件格式”,就不要配置 JSONEventDeserializer
#(否则会解析失败)
# agent.sources.kafka-source.deserializer = org.apache.flume.source.kafka.JSONEventDeserializer

# ---- Channel ----
agent.channels.memory-channel.type = memory
agent.channels.memory-channel.capacity = 10000
agent.channels.memory-channel.transactionCapacity = 1000

# ---- Sink: 本地滚动文件(注意是 file_roll 不是 file)
agent.sinks.file-sink.type = file_roll
agent.sinks.file-sink.sink.directory = /tmp/flume-kafka-output
agent.sinks.file-sink.sink.rollInterval = 60

# ---- 绑定 ----
agent.sources.kafka-source.channels = memory-channel
agent.sinks.file-sink.channel = memory-channel

 

保存好配置文件,接下来我们回到根目录

cd ~

创建文件夹

mkdir -p /tmp/flume-kafka-output

然后进入flume目录,输入命令启动

cd /home/hadoop/apache-flume-1.11.0-bin/

 ./bin/flume-ng agent --conf ./conf --conf-file ./conf/kafka_flume.conf --name agent -Dflume.root.logger=INFO,console

五、发送消息到kafka-flume

我们到vscode里面,写一个python程序(pycharm也可以的,这个随意)

可能遇到的bug:发送不成功

随便克隆一台连接,输入命令查看防火墙状态

systemctl status firewalld.service
如果看到running,把防火墙关闭

systemctl stop firewalld.service

再次运行代码,发送成功后,我们在随意克隆的连接上,输入命令

cd /tmp/flume-kafka-output

ls

有东西的话,我们打开第一个看一下,注意每个人的文件都是不一样的,别跟着我写

 cat 1761666060991-1

当出现这些写进去的东西,我们就成功啦~~

完成这一步,我们就实现了通过VScode写python代码发送消息到kafka-flume

结束,完结撒花~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值