经典案例:三流影响hbase共享课列表(教材id+schoolId为rowkey)
debezium结果kafka connect实时捕获mysql变更事件(binlog)
1 2 3 4 5
| 主要介绍kafka的数据特点: 只有after是插入操作 只有before是删除操作 有before又有after是更改操作,before是修改前的数据after是修改后的数据 为null是debezium捕获mysql的binlog中产生的垃圾数据
|
流一: tp_j_course_question_info 课与试题的关联表
1 2 3 4 5 6 7
| 字段选取:course_id,question_id,is_quote,local_status 过滤条件: course_id <0 and is_quote=0 为非引用课列表内容(一课包含多个试题,一个试题在多个课下) 注意逻辑字段: 更新操作中local_status为2是删除操作 后续操作: 1.如果是有效的且是共享课,是删除操作,非引用试题列表长度为0,从共享课列表中删除 2.如果是有效且共享课,是添加操作,非引用试题列表长度为1,在共享课列表中添加数据
|
流二: tp_course_info 课信息表
1 2 3 4 5 6 7
| 字段选取:share_type,local_status,dc_school_id 过滤条件:course_id <0 后续操作: 1.如果为更新操作: 1).如果share_type从其他值变为1并且非引用试题列表不为0;则在共享课列表添加课 2).如果local_status从1变成2并且非引用试题列表长度不为0,则从共享课列表移除课 2.如果是插入操作:如share_type=1,如非引用试题列表长度不为0,在共享课列表添加课
|
流三: tp_j_course_teaching_material 课与教材的关联表
1
| 如果为插入操作,如非引用试题列表长度不为0,如share_type=1,local_status=1,则在共享课列表添加课
|
总结
1 2
| 三个流相互依赖,但是顺序为无序,每个流过来都需要判断其他两个流的相关字段在hbase中是否有值,如果没有值就只存储自己的数据;如果都有值就进行判断对目标hbase表数据是添加课列表还是删除相关课列表 历史数据:使用hive+spark+hbase架构,离线程序进行生成数据
|