flume将mysql数据实时监控导入kafka
一、数据准备
这里我们使用一个极为简单的mysql数据表作为测试使用,如下
二、flume-ng-sql-source资源下载准备
需要到https://github.com/keedio/flume-ng-sql-source下载源码并且使用maven编译打包程序获得jar包
流程如下:
- 下载源码压缩包
- 上传压缩包并解压
unzip flume-ng-sql-source-develop.zip
- 进入pom所在目录编译打包
cd flume-ng-sql-source-develop/
mvn package
- 进入target目录将
flume-ng-sql-source-1.5.3-SNAPSHOT.jar
拷贝到flume目录下的lib目录中
cp flume-ng-sql-source-1.5.3-SNAPSHOT.jar /opt/soft/flume/apache-flume-1.6.0-cdh5.14.2-bin/lib/
- 更名
flume-ng-sql-source-1.5.3-SNAPSHOT.jar
为flume-ng-sql-source-1.5.3.jar
mv flume-ng-sql-source-1.5.3-SNAPSHOT.jar flume-ng-sql-source-1.5.3.jar
-
拷贝mysql驱动到flume目录下的lib目录中
-
如果不想这么麻烦可以直接下载我已经打包好的jar包放到flume文件下的lib目录下,资源点击链接下载,内容包含打包好的jar包及mysql驱动
链接:https://pan.baidu.com/s/1oGH5r1-4g_0yDXBEbhn8og
提取码:07df
三、编辑flume配置
flume配置如下,我这里是直接以kafka作为channel,省去sink操作
# 命名
a1.sources = r1
a1.channels = c1
# source
a1.sources.r1.type = org.keedio.flume.source.SQLSource
a1.sources.r1.hibernate.connection.url = jdbc:mysql://192.168.56.20:3306/mydemo?useUnicode=true&characterEncoding=utf-8&useSSL=false
a1.sources.r1.hibernate.connection.user = root
a1.sources.r1.hibernate.connection.password = 1234
a1.sources.r1.hibernate.connection.autocommit = true
# mysql驱动
a1.sources.r1.hibernate.connection.driver_class = com.mysql.jdbc.Driver
# 查询延迟
a1.sources.r1.hibernate.run.query.delay = 5000
# 存放状态数据
a1.sources.r1.status.file.path = /opt/flumedata/status
a1.sources.r1.status.file.name = sqlSource.status
# 查询表
a1.sources.r1.table = users
a1.sources.r1.columns.to.select = *
a1.sources.r1.batch.size = 1000
a1.sources.r1.max.rows = 1000
a1.sources.r1.hibernate.connection.provider_class = org.hibernate.connection.C3P0ConnectionProvider
a1.sources.r1.hibernate.c3p0.min_size = 1
a1.sources.r1.hibernate.c3p0.max_size = 10
# channel
a1.channels.c1.type = org.apache.flume.channel.kafka.KafkaChannel
a1.channels.c1.kafka.bootstrap.servers = jzy:9092
a1.channels.c1.kafka.topic = topic_log
a1.channels.c1.parseAsFlumeEvent = false
# 绑定channel和source关系
a1.sources.r1.channels=c1
四、启动并实现
- 启动zookeeper和kafka
zkServer.sh start
kafka-server-start.sh /opt/soft/kafka/kafka_2.11-2.4.0/config/server.properties
- 创建flume配置中的kafka topic
kafka-topics.sh --create --zookeeper jzy:2181 --topic topic_log --replication-factor 1 --partitions 1
- 创建flume配置中的存放状态文件目录
mkdir -p /opt/flumedata/status
- 启动flume
flume-ng agent -n a1 -c conf -f /opt/flumeconf/mysql-flume01.conf -Dflume.root.logger=INFO,console
- 启动kafka消费监控,查看是否实时采集
kafka-console-consumer.sh --bootstrap-server jzy:9092 --from-beginning --topic topic_log
五、结果展示
如下数据已经采集导入到kafka当中
验证:
在mysql当中插入新的一条数据
id为3新插入的数据实时更新到kafka当中