flmue实时增量抽取mysql数据到kafka和hdfs

近期做实时的处理一部分数据,数据在mysql中,但实现方案为kafka+jstorm的方式处理,因此需要把mysql的数据先加载到kafka,同时需要把这份数据备份到hdfs中,因此就想到采用flume的方式,一个数据来源实现数据的多分分发;因此自己也花点时间把这个配置分享出来

flume简要描述:http://www.cnblogs.com/zhangyinhua/p/7803486.html

具体实现方式如下:

一,下载flume-ng-sql-source-1.4.1.jar,放入flume的lib目录下
链接:https://pan.baidu.com/s/1krRxL3vi1PcTqVN_pF3Pug 密码:fkod


二,将mysql驱动jar包放入flume的lib目录下(mysql5.5)
链接:https://pan.baidu.com/s/1sZv2b70mbBqcr4mrBLAbTQ 密码:cbxj


三,flume配置文件

a1.channels = ch-1 ch-2

a1.sources = src-1

a1.sinks = KAFKA HDFS

###########sql source#################

# For each one of the sources, the type is defined

a1.sources.src-1.type = org.keedio.flume.source.SQLSource

a1.sources.src-1.hibernate.connection.url = jdbc:mysql://10.1.40.104:3306/ibrain

# Hibernate Database connection properties

a1.sources.src-1.hibernate.connection.user = root

a1.sources.src-1.hibernate.connection.password = root

#这个参数很重要,默认false,如果设为false就不会自动查询

a1.sources.src-1.hibernate.connection.autocommit = true

#声明mysql的hibernate方言

a1.sources.src-1.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect

#声明mysql驱动

a1.sources.src-1.hibernate.connection.driver_class = com.mysql.jdbc.Driver

#查询间隔,单位毫秒

a1.sources.src-1.run.query.delay=5000

a1.sources.src-1.hibernate.columns.to.select = *

#表里面的某个字段,用来判断增量

a1.sources.src-1.hibernate.incremental.column.name =submit_time

#声明保存flume状态的文件夹位置

a1.sources.src-1.status.file.path = /opt/

a1.sources.src-1.status.file.name = syncDataToHdfsAndKafka.status

#声明从第一条数据开始查询

a1.sources.src-1.start.from = 2012-07-28 00:00:0.0000000

#sql语句自定义,但是要注意:增量只能针对查询字段的第一个字段,如下面的SUBMIT_TIME,经测试系统默认如此.

#$@$表示增量列上一次查询的值,记录在status文件中

#查询sql不能加";",不然会报错

a1.sources.src-1.custom.query = select SUBMIT_TIME,ID,ENTRANCE_GUARD_ID,ENTRANCE_GUARD_TYPE,ENTRANCE_GUARD_STATUS,ID_CARD,NAME,EXAM_SITE_ID,FACE_IDENTIFY_RESULT,FACE_IDENTIFY_MESSAGE,FACE_BASE64,ENTRY_TYPE from T_ZCKJ_MJ_MJSJ  where  SUBMIT_TIME > to_timestamp('$@$','yyyy-mm-dd hh24:mi:ss.ff6')

 

#设置分批参数

a1.sources.src-1.batch.size = 1000

a1.sources.src-1.max.rows = 1000

 

#设置c3p0连接池参数

a1.sources.src-1.hibernate.connection.provider_class = org.hibernate.connection.C3P0ConnectionProvider

a1.sources.src-1.hibernate.c3p0.min_size=1

a1.sources.src-1.hibernate.c3p0.max_size=10

 

######数据通道定义##########

#数据量不大,直接放内存。其实还可以放在JDBC,kafka或者磁盘文件等

a1.channels.ch-1.type = memory

# 通道队列的最大长度

a1.channels.ch-1.capacity = 1000

# putList和takeList队列的最大长度,sink从capacity中抓取batchsize个event,放到这个队列。所以此参数最好比capacity小,比sink的batchsize大。 # 官方定义:The maximum number of events the channel will take from a source or give to a sink per transaction.

a1.channels.ch-1.transactionCapacity = 1000

a1.channels.ch-1.byteCapacityBufferPercentage = 20

#默认值的默认值等于JVM可用的最大内存的80%,可以不配置

a1.channels.ch-1.byteCapacity = 68435456

a1.channels.ch-1.keep-alive = 60

a1.channels.ch-1.capacity = 1000000

 

a1.channels.ch-2.type = memory

a1.channels.ch-2.capacity = 1000

a1.channels.ch-2.transactionCapacity = 1000

a1.channels.ch-2.byteCapacityBufferPercentage = 20

a1.channels.ch-2.byteCapacity = 68435456

a1.channels.ch-2.keep-alive = 60

a1.channels.ch-2.capacity = 1000000

 

#####配置hdfs sink 数据持久化备份###############

a1.sinks.HDFS.type = hdfs

#/**存放数据的hdfs目录*/

a1.sinks.HDFS.hdfs.path = hdfs://cdh2:8020/flume/oracle/topic/test_%Y%m%d

#文件前缀。默认值FlumeData

a1.sinks.HDFS.hdfs.filePrefix=prefix_%Y%m%d

#文件后缀

a1.sinks.HDFS.hdfs.fileSuffix=prefix_%Y%m%d

#文件格式, 有3种格式可选择:SequenceFile, DataStream or CompressedStream

a1.sinks.HDFS.hdfs.fileType = DataStream

a1.sinks.HDFS.hdfs.writeFormat = Text

#设置文件存储数据多大的时候生成下一个文件,建议设置成128M和块大小相同;默认值1024,单位是字节。设置为0的话表示不基于文件大小

a1.sinks.HDFS.hdfs.rollSize = 268435456

#设置滚动时间,每隔多少时间生成一个文件.如果设置成0,则禁止滚动,可以使所有数据被写到一个文件中.单位是s;单位是秒,默认30秒。

a1.sinks.HDFS.hdfs.rollInterval = 3600

#设置文件多少行时,滚动生成下一个文件,设置成0时禁止滚动

a1.sinks.HDFS.hdfs.rollCount = 0

 

 

######配置kafka sink ##############################

a1.sinks.KAFKA.type = org.apache.flume.sink.kafka.KafkaSink

#kafka话题名称

a1.sinks.KAFKA.kafka.topic = topic_mengjin_result

#kafka的地址配置

a1.sinks.KAFKA.kafka.bootstrap.servers = 10.1.80.4:9092,10.1.80.7:9092,10.1.80.8:9092

#设置序列化方式

a1.sinks.KAFKA.serializer.class=kafka.serializer.StringEncoder

a1.sinks.KAFKA.kafka.producer.acks = 1

a1.sinks.KAFKA.flumeBatchSize = 20

 

######绑定sources sinks###########

a1.sources.src-1.channels=ch-1 ch-2

a1.sinks.HDFS.channel = ch-1

a1.sinks.KAFKA.channel = ch-2

 

四 启动程序

bin/flume-ng agent \
-c conf \
-n a1 \
-f /opt/flume.conf \
-Dflume.root.logger=DEBUG,console

注:由于我上述的配置文件放在的目录为:/opt/flume.conf

 

 

 

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值