在 docker 上添加 MongoDB Sink 连接器?

Posted

技术标签:

【中文标题】在 docker 上添加 MongoDB Sink 连接器?【英文标题】:Add MongoDB Sink Connector on docker? 【发布时间】:2021-11-03 07:14:37 【问题描述】:

我有一台 Ubuntu 机器,我按照这些步骤使用 docker 运行 Confluent Platform。

https://docs.confluent.io/platform/current/quickstart/ce-docker-quickstart.html

我可以很好地制作和订阅消息。

我正在尝试添加MongoDB Sink Connector,以便与 mongo 数据库同步数据。

    我已经下载了这个压缩文件https://www.confluent.io/hub/hpgrahsl/kafka-connect-mongodb

    我已经使用正确的 mongo 端点编辑了 etc/MongoDbSinkConnector.properties 文件

    我已将 zip 文件上传到我的 Ubuntu 机器上

    我创建了一个文件Dockerfile,内容如下

    FROM confluentinc/cp-kafka-connect-base
    
    COPY hpgrahsl-kafka-connect-mongodb-1.4.0.zip /tmp/hpgrahsl-kafka-connect-mongodb-1.4.0.zip
    
    RUN confluent-hub install --no-prompt /tmp/hpgrahsl-kafka-connect-mongodb-1.4.0.zip
    

    我已经执行了以下命令docker build . -t my-custom-image:1.0.0

    Sending build context to Docker daemon  15.03MB
    Step 1/3 : FROM confluentinc/cp-kafka-connect-base
     ---> 8fe065fffe44
    Step 2/3 : COPY hpgrahsl-kafka-connect-mongodb-1.4.0.zip /tmp/hpgrahsl-kafka-connect-mongodb- 
    1.4.0.zip
     ---> Using cache
     ---> ed2e4ec7ff97
    Step 3/3 : RUN confluent-hub install --no-prompt /tmp/hpgrahsl-kafka-connect-mongodb-1.4.0.zip
     ---> Using cache
     ---> 034f82e2e136
    Successfully built 034f82e2e136
    Successfully tagged my-custom-image:1.0.0
    

我错过了什么吗?我的 mongo 没有更新

我是否也必须编辑docker-compose.yml

如何调试这个连接器,它有日志吗?

【问题讨论】:

【参考方案1】:

当您在 Docker(包括cp-kafka-connect-base)映像下运行 Kafka Connect 时,它通常处于 分布式 模式。要在此模式下创建连接器配置,请使用 REST 调用;它不会从平面文件加载配置(每个独立模式)。

您可以启动已创建的容器,然后使用 REST 调用手动创建连接器,也可以自动执行该 REST 调用 - 以下是在 Docker Compose 中执行此操作的示例:

  kafka-connect-01:
    image: confluentinc/cp-kafka-connect-base:6.2.0
    depends_on:
      - kafka
    ports:
      - 8083:8083
    environment:
      CONNECT_BOOTSTRAP_SERVERS: "kafka:29092"
[…]
    command: 
      - bash 
      - -c 
      - |
        #
        echo "Installing connector plugins"
        confluent-hub install --no-prompt hpgrahsl/kafka-connect-mongodb:1.4.0

        #
        echo "Launching Kafka Connect worker"
        /etc/confluent/docker/run & 

        #
        echo "Waiting for Kafka Connect to start listening on localhost ⏳"
        while : ; do
          curl_status=$$(curl -s -o /dev/null -w %http_code http://localhost:8083/connectors)
          echo -e $$(date) " Kafka Connect listener HTTP state: " $$curl_status " (waiting for 200)"
          if [ $$curl_status -eq 200 ] ; then
            break
          fi
          sleep 5 
        done
        echo -e "\n--\n+> Creating connector"
        curl -s -X PUT -H  "Content-Type:application/json" http://localhost:8083/connectors/mongo-connector/config \
            -d '
              [… connector JSON config goes here …]
        '
        sleep infinity

参考资料:

https://rmoff.net/2018/12/15/docker-tips-and-tricks-with-kafka-connect-ksqldb-and-kafka/ https://developer.confluent.io/learn-kafka/kafka-connect/docker/

【讨论】:

嗨罗宾,实际上我刚刚解决了这个问题,在 youtube 上查看了您的博客和视频之后。非常感谢:D rmoff.net/2020/06/19/…

以上是关于在 docker 上添加 MongoDB Sink 连接器?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用在 docker 上运行的 debezium 和 confluent-sink-connector 将所有更改从源数据库复制到目标数据库

添加 Root 密码并在启动时在 MongoDB Docker 容器上创建应用程序用户

Flume-ng-mongodb-sink

MongoDB Sink 连接器:Apache Kafka 中的消息被截断

Docker入门在docker使用MongoDB

在 Docker 上运行的 Mongodb 正在重新启动后擦除集合