Debezium系列之:解决Debezium集群内存泄漏造成debezium服务挂掉的问题
漫长的登顶之路,厚积薄发,加油~
一、现象
- debezium集群接入大量的数据库,在使用一段时间后,可能出现集群挂掉的现象,虽然自动托管debezium服务,可以在服务挂掉后,重新拉起服务。但是还是需要深入研究导致debezium集群挂掉的根本原因。
- 经过研究发现是因为Debezium存在内存泄漏的情况
二、相关背景知识
理解mysql的table id:
- 基于行模式复制的binlog中,table id的变化依赖于cache中是否存储了binlog操作表的表定义。
- 如果cache中存在,则table id不变。
- 当cache中不存在时,table id根据上一次操作的table id自增1
- table id与实际操作的数据表没有直接对应关系,而与操作的表是否在cache中有关
- table_def_cache中默认存放400个表的定义,超过该范围,会将最久未用的表定义置换出cache
- 假设MySQL服务器的
table_def_cache
大小为 400,当有超过 400 个表不断写入,同一个表的表 id 可能会随着时间的推移而增加,并且 tableMapEventByTableId