【问题标题】:Single kafka topic for multiple oracle tables多个oracle表的单个kafka主题
【发布时间】:2021-07-21 13:21:06
【问题描述】:

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

【问题讨论】:

    标签: mongodb oracle apache-kafka confluent-platform


    【解决方案1】:

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

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

    根据您需要管理 Kafka Connect 工作集群规模的数据量,这可以通过分布式模式轻松完成,您只需水平横向扩展即可根据需要处理工作负载。


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

    【讨论】:

    • 感谢 Robin 四您的意见。我也有同样的想法和设计。是 Confluent 团队要求我们整合连接器。
    【解决方案2】:

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

    但是,如果您只想使用单个主题,您可以尝试利用 kafka 标头,该标头可以保存事件的表名。

    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())));
      }
    

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

    【讨论】:

    • 谢谢苏伦德拉。如果可能的话,你能给我一个例子吗...
    猜你喜欢
    • 2021-08-04
    • 2020-01-01
    • 2018-02-16
    • 2020-12-08
    • 2020-04-05
    • 2020-06-03
    • 2019-01-04
    • 2020-04-12
    • 1970-01-01
    相关资源
    最近更新 更多