我在一个变更数据捕获项目中工作。我有一个mysql数据库。我使用debezium捕获所有更改并将其发送给kafka。后来,我读取了Spark的所有信息,并使用jdbc将其发送到Apache Phoenix。
我正在使用debezium和一个重路由选项,它只将所有表的更改发送到一个kafka主题。有了这个配置,我确信我可以按顺序阅读spark中独特的kafka主题。
但我的问题是:如果我使用debezium而没有重新路由选项,并且我在不同的kafka主题中有每个表的更改,我如何保证我以正确的顺序读取所有主题的事件?
我知道我可以使用Spark来排序,例如按时间戳排序,但是如果比如说,一个kafka主题脱机10分钟,因为出现了问题,但其他kafka主题继续工作,我将在Spark中遇到排序问题。
我该如何面对这个问题?
发布于 2019-12-11 03:22:39
我在Debezium上用这个配置解决了这个问题
{
"name": "name-connector",
"config": {
"plugin.name": "pgoutput",
"connector.class": "io.debezium.connector.postgresql.PostgresConnector",
"database.hostname": "0.0.0.0",
"database.port": "5433",
"database.user": "postgres",
"database.password": "******",
"database.dbname" : "database",
"database.server.name": "database",
"database.history.kafka.bootstrap.servers": "kafka:9092",
"database.history.kafka.topic": "schema-changes.database",
"decimal.handling.mode" : "string",
"time.precision.mode" : "connect",
"tombstones.on.delete" : false,
"transforms":"routerTopic",
"transforms.routerTopic.type":"io.debezium.transforms.ByLogicalTableRouter",
"transforms.routerTopic.topic.regex":"database.public.(.*)",
"transforms.routerTopic.topic.replacement":"database.public",
}
}使用transforms.routerTopic.topic.regex和transforms.routerTopic.topic.replacement配置主题路由
https://debezium.io/documentation/reference/0.10/configuration/topic-routing.html
https://stackoverflow.com/questions/55960692
复制相似问题