我想知道apachekafka是否可以用于具有关系数据库(一个源和多个源,通过kafka示例复制)的容错环境。
我对Kafka很陌生,互联网上的很多消息都说,使用Kafka连接可以很容易地做到这一点,但有几个方面的问题我从来没有找到任何解释:
我们如何保证在复制过程中不会违反任何外键?我见过一些连接器,它们将数据更改发送到数据库中每个表的一个单独的kafka主题,但是我们如何按照创建它们的相同顺序读取它们,以便在复制过程中不违反fk?即使我们把所有的更改放在一个主题中,这个主题也可能是分区的,那么我们如何以相同的顺序阅读它们呢?这是否意味着我们只能使用单个主题和单个分区?或者我们应该删除目标数据库中的所有fk约束,而不关心它们的完整性?
我确实觉得用一个只读的关系数据库是不合适的,但是有很多遗留的客户机,我们不能一次重写。
1条答案
按热度按时间gpnt7bae1#
我目前在一个项目中,在rdbms数据库上使用cdc(变更数据捕获)。
在我的例子中,cdc为数据库中的一个表写入一个主题,分区的数量实际上是1(以确保所有消息都是有序的)。
不幸的是,Kafka没有保证fk约束的完整性。我的意思是,如果完整性在数据库中是有效的,那么它将在kafka上,但是没有检查fks约束的验证系统(您可以与一个不是具有kafka流的fk的字段连接)。
使用kafka流,您当然可以执行“joins”操作,但是您必须知道源数据库上的fk约束才能执行一些有效的业务代码。
编辑:当然,您可以使用cdc编写的每个主题,并将其生成一个具有更多分区的其他主题,然后您将按照您的需要重新分发数据(甚至使用一个新的模式)。