使用kafka最佳实践捕获oracle更改数据

mwngjboj  于 2021-06-08  发布在  Kafka
关注(0)|答案(1)|浏览(337)

我正在从事一个项目,我们需要将oracle的实时更新流式传输到一组系统(cassandra、hadoop、实时处理等)。我们计划使用golden gate从oracle捕获更改,将它们写入kafka,然后让不同的目标系统从kafka读取事件。需要做出很多设计决策:
更新时要将哪些数据写入Kafka?
goldengate以记录id和updated字段的形式发出更新。这些变化可以通过以下三种方式之一写入Kafka:
整行:对于每一个字段更改,发出整行。这提供了“object”的完整表示,但可能需要进行查询才能获得完整的行。
只更新字段:最简单,但使用起来有点奇怪,因为您从来没有一个对象的完整表示形式很容易访问。如何将其写入hadoop?
事件:可能是最干净的格式(也是最适合kafka的格式),但是将db字段更新转换为事件需要大量的工作。
在哪里执行数据转换和清理?
oracle数据库中的模式是由第三方crm工具生成的,因此不太容易使用-存在奇怪的字段名、转换表等。这些数据可以在(a)源系统中清理,(b)使用流处理的kafka,(c)每个目标系统中清理。
如何保证并行用户的有序处理?
kafka允许每个使用者读取不同的分区,其中每个分区都保证是有序的。主题和分区的选取方式必须保证每个分区中的消息是完全独立的。如果我们为每个表选择一个主题,并根据记录id将记录散列到分区中,这应该在大多数情况下都有效。但是,添加新的子对象时会发生什么情况?我们需要确保它在父级使用它的外来id之前得到处理

egdjgwm8

egdjgwm81#

我实现的一个解决方案是只将记录id发布到kafka中,并在consumer中使用对源数据库的查找来获得完整的记录。我认为在问题中描述的场景中,您可能希望使用crm工具api来查找特定的记录,而不是在代码中对记录查找进行反向工程。你是如何实现这个解决方案的?

相关问题