|
|
1
3
有两种方法可以做到这一点,它们需要最少的代码,然后总是可以选择编写自己的代码。 (一些同事刚刚用SQL Server和Oracle完成了这方面的研究,所以我在这里对此略知一二) 如果您使用的是SQL Server的企业版,则可以使用更改数据捕获和 Confluent Kakfa Connect 读取对数据的所有更改。这(似乎)需要企业许可证,还可能包括其他一些额外成本(我对这里的细节不太清楚。这可能是因为我们使用的是较旧版本的SQL Server,或者因为我们有许多数据库服务器)。 如果你没有/不能使用CDC的东西, Kafka Connect's JDBC support 还具有轮询数据库以获取更改的模式。如果您的记录 some kind of timestamp column ,但通常情况就是这样。 没有CDC的仅民意调查模式意味着 每一个 更改-即如果您每30秒轮询一次,记录更改两次,您将不会收到有关此更改的单独消息,但如果这有意义,您将收到一条包含这两个更改的消息。这对于您的业务领域来说可能是可以接受的,但需要注意一些事情。 无论如何,Kafka Connect非常酷-它将根据表名自动为您创建Kafka主题,包括将Avro模式发布到模式注册表。(主题名称是可知的,因此如果您处于自动创建主题=false的环境中,那么您可以根据表名称手动创建主题)。从没有卡夫卡连接的知识开始,我花了大约2个小时才弄清楚足够的配置,以便将一个大型SQL Server数据库转储到卡夫卡。 我在中找到了其他文档 a Github repository of a Confluent employee 描述所有这些,以及设置文档等。 总是可以选择让你的web应用程序本身成为卡夫卡制作人,而忽略较低级别的数据库内容。这可能是一个更好的解决方案,例如,如果一个请求在数据存储中创建了许多记录,但实际上这是一个相关的事件(订单可能会在关系数据库中派生出一些行项目记录,但下游数据库只关心订单的生成)。 在消费者端(即“紧挨着”您的另一个数据库),您可以在另一端使用Kafka Connect来获取更改,如果需要,甚至可以编写自定义插件,或者编写您自己的Kafka消费者微服务来将更改放入另一个数据库。 |