我正在使用kafka connect来传输一个有250000000条记录的数据库。从源代码读取不是问题,它完全是在一个不明显的时间范围内读取的,并存储在Kafka代理上。不过,Flume侧的速度非常慢,需要几天才能完成。
我正在使用具有以下配置的jdbc接收器连接器:
"config": {
"auto.create": "true",
"auto.evolve": "true",
"connector.class": "io.confluent.connect.jdbc.JdbcSinkConnector",
"insert.mode": "upsert",
"pk.fields": "id",
"pk.mode": "record_value",
"tasks.max": "20",
"batch.size": "5000",
"max.poll.records": "5000"
}
我正在使用一个aws postgres rds示例:db.m5.4xlagle(8核16vcpus 64gbram)
sink表除了主键之外没有其他索引。使用rds performance insights,datafileread和walwritelock消耗了绝大多数活动(datafileread约占60%,walwritelock约占30-40%)。
我不熟悉数据库速度和管理,这是典型的性能吗?如果没有,我可以研究哪些方法来提高性能?这是不是我的示例没有足够的能力来处理写操作?
这是数据库负载的一个图像,当我删除受影响的sink表上的所有索引时,靠近尾端的绿线增长。
1条答案
按热度按时间wgmfuz8q1#
在发布前20分钟,我清除了除主键以外的所有索引。这大大增加了处理时间,现在已经处理了几百万行。