flume实时监控oracle增量数据推送到kafka

版本号:

centos6.5    jdk1.8    flume-1.7.0    kafka_2.11-0.10.0.0

这里我就不去叙述安装的步骤了,百度上应该有很多。下面直入主题

需要的jar包如下:

(1):flume-ng-sql-source-1.4.3.jar。版本要求:flume-1.7.0以下的版本最好是使用1.4.3,稳定。flume-1.8的话稳定版应该是1.5.0。flume-ng-sql-source-1.4.3.jar真的是特别难找,找了老半天才找到。给大家附上

https://pan.baidu.com/s/1-GeOpnZ3qmHCsnhmJo3Lig,提取码:esm3

(2):odbc5.jar(oracle的jar,在oracle安装目录/jdbc/lib下)

(3):把这两个jar包放到flume/lib/目录下

flume conf配置文件如下(里面解释的很清楚了,实在是良心啊!!!):

a1.channels = c1
a1.sources = r1
a1.sinks = k1
###########sql source#################
# For each one of the sources, the type is defined
#source组件类型名称,必须为org.keedio.flume.source.SQLSource
a1.sources.r1.type = org.keedio.flume.source.SQLSource
#与远程数据库连接的网址,这里我是oracle
a1.sources.r1.hibernate.connection.url = jdbc:oracle:thin:@xxx.xxx.xxx.xxx:1521/orcl
# Hibernate Database connection properties
#用于连接数据库的用户名
a1.sources.r1.hibernate.connection.user = user
#连接数据库的密码
a1.sources.r1.hibernate.connection.password = password
#是否自动提交
a1.sources.r1.hibernate.connection.autocommit = true
#Dialect to use by hibernate
a1.sources.r1.hibernate.dialect = org.hibernate.dialect.Oracle10gDialect
#驱动类
a1.sources.r1.hibernate.connection.driver_class = oracle.jdbc.driver.OracleDriver
#在运行查询完成后等待时间(ms)
a1.sources.r1.run.query.delay=10000
#保存状态文件的路径
a1.sources.r1.status.file.path = /home/hadoop/flume/sqlSource
#保存状态文件的名称
a1.sources.r1.status.file.name = sqlSource.status
# Custom query
#查询开始的标识,使用你增量的字段。这里我用的时间毫秒值来做增量判断,可以根据业务来更改
a1.sources.r1.start.from = 946656000000
#自定义查询语句,一定要确保查询结果的第一位置返回增量字段
a1.sources.r1.custom.query = SELECT * FROM (SELECT TO_NUMBER(TCSJ-TO_DATE('1970-01-01 08:00:00','YYYY-MM-DD HH24:MI:SS'))*24*60*60*1000 AS SJHM,x,x,x,x,x,x,x,x FROM BXS) WHERE SJHM>$@$ ORDER BY SJHM ASC
#批量大小
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 = memory
#在channel中最多能保存多少个event
a1.channels.c1.capacity = 10000
#在每次从source获取数据后者将数据sink出去的一次事务操作中,最多处理的event数
a1.channels.c1.transactionCapacity = 10000
#在channel中最多容纳所有event body的总字节数
a1.channels.c1.byteCapacity = 800000
#这个值得含义跟上面一样,只不过这个计算event header跟最大可用内存的字节占比
a1.channels.c1.byteCapacityBufferPercentage = 20
##############################
#sink的类型
a1.sinks.k1.type = org.apache.flume.sink.kafka.KafkaSink
#kafka topic
a1.sinks.k1.topic = bxs
#brokerList
a1.sinks.k1.brokerList = hadoopnamenode:9092,hadoopdatanode1:9092,hadoopdatanode2:9092
#ack机制:1表示producer只要收到一个leader分区副本成功写入的通知就认为推送消息成功了。0代表producer发送一次就不在发送,不管成不成功。-1代表producer只有收到分区内所有副本成功写入的通知才认为推送成功
a1.sinks.k1.requiredAcks = 1
#batch的大小
a1.sinks.k1.batchSize = 20
a1.sinks.k1.channel = c1
 
a1.sinks.k1.channel = c1
a1.sources.r1.channels=c1

oracle的数据表结构就不贴出来了,很普通的一张表。

kafka的常用命令:

后台启动命令:

./bin/kafka-server-start.sh ./config/server.properties &

查看当前服务器中的所有topic:

./bin/kafka-topics.sh --list --zookeeper hadoopnamenode:2181

创建topic  [1是设置副本数为1,3是设置分区为3个分区]:

./bin/kafka-topics.sh --create --zookeeper hadoopnamenode:2181 --replication-factor 1 --partitions 3 --topic bxs

删除topic [需要server.properties中设置delete.topic.enable=true否则只是标记删除或者直接重启]

./bin/kafka-topics.sh --delete --zookeeper hadoopnamenode:2181 --topic bxs

通过shell消费消息     消费

./bin/kafka-console-consumer.sh --zookeeper hadoopnamenode:2181 --from-beginning --topic bxs

测试过程及结果:

1)后台启动kafka

2)  创建topic

3)启动消费者消费数据

4)启动flume任务实时监控oracle数据:flume-ng agent -c . -f /home/hadoop/flume/flume/conf/myconf/oracle_kafka.conf -n a1 -Dflume.root.logger =INFO,console

5)数据表,里面有3条数据代表历史数据(表名,字段名,数据比较隐式,我就加了马赛克。时间放了出来)

6) 增量数据sql(就写了几条测试一下,因为数据还是涉及隐私,还是加了马赛克。不好看,凑合看看吧)

7)flume任务启动(启动日志太多,贴一丢丢)

8)flume启动后可以看到,kafka已经消费到历史的3条数据

9)运行增量sql,随便贴几条

10)kafka消费到的增量数据的结果

测试过程及结果:

1.kafka启动消费者消费topic数据

遇到的一些bug:

1.遇到的bug忘记收集了,凭记忆大部分肯定都是sql上出现一些bug

2.sql查询结果千万一定要返回增量字段,否则sink历史数据是可以的,在做增量监控就会报错,连接不上的错误。

3.还有是返回增量字段类型也要注意,一定要和a1.sources.r1.start.from给定的类型一致,否则也会发生些bug。

结尾:

大致就是这些,其余有些忘了。还只是个小白,哪里不对各为大佬多多指导,有什么问题可以及时和我沟通。有bug也可以问问我。别忘了给我点个赞,嘻嘻!

  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值