使用Kafka最佳实践进行Oracle变更数据捕获

Eug*_*eMi 5 change-data-capture apache-kafka oracle-golden-gate

我正在开发一个项目,我们需要将实时更新从Oracle传输到一堆系统(Cassandra,Hadoop,实时处理等).我们计划使用Golden Gate从Oracle获取更改,将它们写入Kafka,然后让不同的目标系统从Kafka读取事件.需要做出很多设计决策:

在更新时写入Kafka的数据是什么?

GoldenGate以记录ID和更新字段的形式发布更新.这些变化可以通过以下三种方式之一写入Kafka:

  • 完整行:对于每个字段更改,发出完整行.这给出了'对象'的完整表示,但可能需要进行查询才能获得完整的行.
  • 只有更新的字段:最简单的,但它有点奇怪,因为你从来没有一个容易访问的对象的完整表示.如何将此写入Hadoop?
  • 事件:可能是最干净的格式(并且最适合Kafka),但是将db字段更新转换为事件需要大量工作.

在哪里进行数据转换和清理?

Oracle DB中的模式由第三方CRM工具生成,因此不易消费 - 有奇怪的字段名称,转换表等.这些数据可以在(a)源系统之一中清理,( b)Kafka使用流处理,(c)每个目标系统.

如何确保并行消费者的在线处理?

Kafka允许每个使用者读取不同的分区,其中每个分区都保证按顺序排列.需要以保证每个分区中的消息完全独立的方式选择主题和分区.如果我们根据record_id选择每个表的主题和散列记录到分区,那么这应该在大多数情况下都有效.但是,添加新的子对象时会发生什么?我们需要确保在父使用它的foreign_id之前处理它

小智 0

我实现的一种解决方案是仅将记录 ID 发布到 Kafka 中,并在消费者中使用对原始数据库的查找来获取完整的记录。我认为,在问题中描述的场景中,您可能希望使用 CRM 工具 API 来查找该特定记录,而不是对代码中的记录查找进行逆向工程。您最终如何实施该解决方案?