目录
官方提供的source类型已经很多,但是有时候并不能满足实际开发当中的需求,此时我们就需要根据实际需求自定义某些source。
如:实时监控MySQL,从MySQL中获取数据传输到HDFS或者其他存储框架,所以此时需要我们自己实现MySQLSource。
官方也提供了自定义source的接口:
官网说明:https://flume.apache.org/FlumeDeveloperGuide.html#source
需求说明
-
自定义flume的source,实现从mysql数据库当中获取数据,将数据打印到控制台上面来
代码开发步骤

根据官方说明自定义mysqlsource需要继承AbstractSource类并实现Configurable和PollableSource接口。
实现对应的方法:
-
configure(Context context)
初始化context
-
process()
从mysql表中获取数据,然后把数据封装成event对象写入到channel,该方法被一直调用
-
stop()
关闭相关资源
第一步:创建mysql数据库表
--创建一个数据库
CREATE DATABASE IF NOT EXISTS mysqlsource DEFAULT CHARACTER SET utf8;
use mysqlsource;
--创建一个表,保存从目标表已经读取数据的位置信息
CREATE TABLE mysqlsource.flume_meta (
source_tab varchar(255) NOT NULL,
currentIndex varchar(255) NOT NULL,
PRIMARY KEY (source_tab)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
--插入数据
insert into mysqlsource.flume_meta(source_tab,currentIndex) values ('student','1');
select * from mysqlsource.flume_meta;
--创建要拉取数据的表
CREATE TABLE mysqlsource.student(
id int(11) NOT NULL AUTO_INCREMENT,
name varchar(255) NOT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
--向student表中添加测试数据
insert into mysqlsource.student(id,name) values (1,'zhangsan'),(2,'lisi'),(3,'wangwu'),(4,'zhaoliu');
select * from mysqlsource.student;
第二步:创建maven工程,添加依赖
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.6</version>
</dependency>
</dependencies>
第三步:添加配置文件
-
在我们工程的resources目录下,添加jdbc.properties
-
以下属性的值,根据自己的实际情况修改
dbDriver=com.mysql.jdbc.Driver
dbUrl=jdbc:mysql://node03:3306/mysqlsource?useUnicode=true&characterEncoding=utf-8
dbUser=root
dbPassword=123456
第四步:代码开发
1. 定义查询mysql的工具类
package com.xsluo.flume.custominterceptor;
import org.apache.flume.Context;
import org.apache.flume.conf.ConfigurationException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.sql.*;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
public class QueryMysql {
private static final Logger LOG = LoggerFactory.getLogger(QueryMysql.class);
private int runQueryDelay, //两次查询的时间间隔
startFrom, //开始id
currentIndex, //当前id
recordSixe = 0, //每次查询返回结果的条数
maxRow; //每次查询的最大条数
private String table, //要操作的表
columnsToSelect, //用户传入的查询的列
customQuery, //用户传入的查询语句
query,

本文档详细介绍了如何自定义Flume Source来从MySQL数据库中获取数据,并将其传输到其他存储系统。首先,创建MySQL数据库表,接着通过Maven工程添加相关依赖,配置文件设置,然后编写代码,包括查询MySQL的工具类和自定义的mysqlSource类。最后,将编译后的jar包放入Flume的lib目录,配置Flume配置文件并启动Flume服务。
最低0.47元/天 解锁文章
149

被折叠的 条评论
为什么被折叠?



