kafka-connect-hbase 架构分析

       由于项目需将kafka的数据存储至hbase中,有幸了解了confluent 的kafka-connect-hbase 组件,官方提供了基础版本(https://github.com/mravi/kafka-connect-hbase),,而我采用了改进版nishutayal(https://github.com/nishutayal/kafka-connect-hbase),并对改进版进行了更改,增加了topic和hbase表之间的映射关系配置以及从kafka解析中项的配置,其中对比如下:

 

版本 对比
confluent 基础版本 不支持对多个列族的写入
nishutayal 增强版本 zhi支持对多个列族的写入,topic和hbase表为一一对应的关系,较为固定,不支持多个topic往同一个hbase写入
改进版本

增加支持多个topic往同一个hbase表的写入

增加kafka数据解析项的配置,可根据配置解析指定item

 

     由于kafka-connect-hbase依托于confluent框架,梳理kafka-connect-hbase 类图如下:

kafka-connect-hbase 架构分析_第1张图片

     其中:

  1.  HbaseSinkConnector为 connector中的配置类
  2.  task启动调用HBaseSinkTask中的start 方法,初始化HbaseClient 、toPutFunction 。
  3. 根据kafka consumer配置 (consumer.max.poll.records、consumer.max.poll.interval.ms),定时定量的调用HBaseSinkTask的put方法,在此方法中调用toPutFunction中的appliy方法,利用EventParser进行数据的解析,生成byte[],最后调用HBaseClient中的write方法写入至HBase中。

kafka-connect-hbase 组件其实并不复杂,只要按照confluent的框架要求编写相关实现类即可。

新增配置如下:

topics.assign.db.tables
topic与hbase表之间的映射关系,如device_profile_test|device_profile,即将topic中的device_profile_test数据写入至hbase表device_profile中
event.parse.item
kafka 消息中value中的解析项,如event.parse.item=payload,则只解析kafka中的payload项
hbase.tableName.rowkey.columns
hbase.tableName.rowkey.delimiter
hbase.tableName.family
hbase.tableName.xxfamliy.columns

 

以前根据topic配置,现在全部改为hbase的tableName进行配置,更好的便于理解和支持多个topic写入同一个hbase表中。

参考:

  1. confluent kafka-connect-hbase基础版本
  2. https://github.com/nishutayal/kafka-connect-hbase

 

 

 

你可能感兴趣的:(conflunet)