flinkCDC 写SR 内存问题

【StarRocks版本】例如:2.2.7
【集群规模】例如:3fe+5be(fe与be混部)
【机器信息】CPU虚拟核/内存/网卡,例如:48C/64G/万兆
【详述】问题详细描述
flink版本14.4
SR sink版本 flink-connector-starrocks-1.2.2_flink-1.14_2.12.jar
SR表是主键模型

场景:使用flinkCDC,从kafka消费数据,写入SR,现在只有两个任务, 两张表实时数据大概800条/秒。 问题是flink taskmanager内越占越大,不释放,自到堆内存全部消耗完。初步排查下来应该是SR sink 内存没有完全释放。
内存排查如下:
jmap -heap pid
老年代内存越来越大,并且手动执行full GC命令也不能释放,说明占内存的对象都是live的

jmap -histo:live pid
发现占用内存的主要是byte数组,这个应该是SR存储数据的格式

从上面两个可以大致得出,SR sink数据到主键表,内存没有释放,最后数据全部停留到了JVM 老年代,知道内存全部耗完。

flinkCDC代码
SET execution.checkpointing.interval = 60s;
CREATE DATABASE IF NOT EXISTS ods;

DROP TABLE IF EXISTS ods.tb_funding_channel_request_order;
CREATE TABLE IF NOT EXISTS ods.tb_funding_channel_request_order (
channel_pay_request_no STRING COMMENT ‘渠道请求单号’
,biz_order_no STRING COMMENT ‘上游业务单号’
,source_biz_order_no STRING COMMENT ‘源业务单号’
) COMMENT ‘资金渠道提交单’
WITH (
‘connector’ = ‘kafka’,
‘topic’ = ‘doirs_topic_ods_fin_channel_exchange_tb_funding_channel_request_order’,
‘properties.bootstrap.servers’ = ‘’,
‘properties.group.id’ = ‘dinky_slave_group_ods_fin_channel_exchange_tb_funding_channel_request_order_test’,
‘scan.startup.mode’ = ‘latest-offset’,
‘format’ = ‘canal-json’,
‘properties.session.timeout.ms’=‘600000’,
‘properties.request.timeout.ms’=‘600000’,
‘properties.max.poll.records’=‘20000’
);

CREATE TABLE IF NOT EXISTS ods.ods_fin_channel_exchange_tb_funding_channel_request_order_ri (
sharding_time STRING ,
channel_pay_request_no STRING COMMENT ‘渠道请求单号’
,biz_order_no STRING COMMENT ‘上游业务单号’
,source_biz_order_no STRING COMMENT ‘源业务单号’
,PRIMARY KEY (sharding_time, channel_pay_request_no) NOT ENFORCED
) with (
‘jdbc-url’ = ‘’,
‘load-url’ = ‘’,
‘username’ = ‘’,
‘password’ = ‘’,
‘database-name’ = ‘ods’,
‘table-name’ = ‘ods_fin_channel_exchange_tb_funding_channel_request_order_ri’,
‘sink.buffer-flush.interval-ms’ = ‘15000’,
‘sink.buffer-flush.max-bytes’ = ‘300000000’,
‘sink.buffer-flush.max-rows’ = ‘100000’,
‘sink.max-retries’ = ‘3’,
‘sink.properties.format’ = ‘json’,
‘sink.properties.strip_outer_array’ = ‘true’,
‘sink.parallelism’ = ‘1’,
‘connector’ = ‘starrocks’
);

insert into ods.ods_fin_channel_exchange_tb_funding_channel_request_order_ri
select
DATE_FORMAT(create_time,‘yyyy-MM-dd HH:mm:ss’) as sharding_time,
channel_pay_request_no – 渠道请求单号
,biz_order_no – 上游业务单号
,source_biz_order_no – 源业务单号
FROM ods.tb_funding_channel_request_order – 资金渠道请求单
where DATE_FORMAT(create_time,‘yyyy-MM-dd’) >= DATE_FORMAT(TIMESTAMPADD(DAY, -15, CURRENT_TIMESTAMP),‘yyyy-MM-dd’)

我也遇到了同样的问题,但没人回复吗?

有解决吗,我也遇到了同样的问题