多个 oracle 表的单个 kafka 主题

Single kafka topic for multiple oracle tables

我的要求是通过 Kafka 将 200 多个 oracle 表加载到 200 多个 mongo 集合中。我想创建单个 JDBC 源连接器、200 多个主题、200 多个接收器连接器。但是 confluent 团队表示,kafka 可能无法处理这么多主题和接收器连接器。他们让我巩固。如何将 200+ oracle 表写入单个主题并写入 mongo 集合?你能帮帮我吗?

除非您的问题中缺少某些特定上下文,否则 Kafka 不会处理 200 多个主题和接收器连接器的建议听起来不正确。

您应该将每个逻辑 table 映射到一个 Kafka 主题。我认为将多个 table 合并到一个主题中的唯一原因是它是否具有相同的逻辑实体(例如,一个 table 跨物理位置(如隔离仓库)进行分片。有 other reasons 用于将多种消息类型放在一个主题中,但它们可能不适用于此处。

根据数据量,您需要管理 Kafka Connect worker 集群的规模,但使用分布式模式很容易做到这一点,您只需水平扩展即可根据需要处理工作负载。


免责声明:我为 Confluent 工作 ;)

我猜这里 Confluent 可能会建议考虑您的 Kafka 集群大小的方法,否则,您所做的事情是有道理的。

但是如果你只想使用单个主题,你可以尝试利用 kafka headers 可以容纳 table-name 一个事件。

Sugaan,请按要求查找示例代码。

制作人:-

  ProducerRecord<String, JsonNode> record = new ProducerRecord<>(topic, key, value);
  record.headers().add("test", "test1".getBytes());

  producer.send(record

消费者:-

  final ConsumerRecords<String, byte[]> consumerRecords = consumer.poll(Duration.ofMillis(100000));
                  
  for (ConsumerRecord<String, byte[]> record : consumerRecords) {
      record.headers().forEach(
              (header -> System.out.println(header.key() + "  " + header.value())));
  }

如果您还有其他问题,请告诉我。