我们建立了一个Kafka建筑,由3名Kafka经纪人和6名工人组成。我们有大约50个主题,代表我的postgresql中的表的数量。我们的目标是使用kafka将每个表中的消息从postgresql复制到sqlserver。从postgresql到kafka,我们使用debezium,从kafka到sqlserver使用jdbcsink。
当我们运行架构时,我们担心延迟。当一条新消息在postgresql中显示时,同一条消息在sqlserver中显示大约需要40秒。如文档所示,我们使用 upsert
因为每个消息都有一个键,其中的键是来自源表的pk。
下面是我们的接收器配置示例:
'Content-Type:application/json' -d '{"name" :"sqlservercon_'$topic_name'",
"config":{"connector.class":"io.confluent.connect.jdbc.JdbcSinkConnector",
"topics":"'$table'",
"connection.url":"XXX",
"connection.user":"XXX",
"connection.password":"XXX",
"transforms":"unwrap",
"transforms.unwrap.type": "io.debezium.transforms.ExtractNewRecordState",
"transforms.unwrap.drop.tombstones": "false",
"delete.handling.mode":"drop",
"auto.create":"true",
"auto.evolve":"true",
"insert.mode":"upsert",
"pk.fields":" '$pk'",
"pk.mode":"record_key",
"delete.enabled":"true",
"batch.size":"100000",
"destination.table.format":"XXX.dbo.'$table'"
更新:
我们又增加了2个工人,每个工人的复制系数为3。另外6个worker的复制因子与前两个相同,没有提高性能。我现在监视我的cpu实用程序是65%-66%,内存是13.7gb,而不是15.7gb。我将每个主题的保留字节设置为数据库中当前大小的2倍或12小时保留时间。我的环境包括两个核心cpu,18 gb ram和500 gb磁盘,我们认为在这种情况下是安全可行的。
在运行接收器之前,当我们部署源连接器(在本例中是debezium)时,它只在8个工作线程中的一个上运行。但当我们一个接一个地运行Flume时,它们在每个工人中分配运行。
暂无答案!
目前还没有任何答案,快来回答吧!