1
0

More than 1 year has passed since last update.

Kafka Connector の各種モジュールを組み込んだDockerイメージを作成してみました

Last updated at Posted at 2022-04-10

Kafka Connector の各種モジュールを組み込んだDockerイメージを作成してみました

概要

Kafka/Confluent の利用において、各種データリソースと接続するために、Kafka Connect に必要なモジュール(プラグイン)を組み込む方法の手順となります。組み込む方法はいくつかあると思いますが、今回はDockerイメージを作成する方法となります。作成したDockerイメージを Azure Container Registry (ACR) にプッシュします。
image.png

そのDockerイメージを利用して、Azure Kubernetes Service(AKS)上で Confluent Platform を実行したときの Connector 画面イメージは以下となります
image.png

ローカル環境

  • macOS Monterey 12.3
  • Azure CLI 2.34.1

前提条件

  1. Azure環境がすでに用意されていること(テナント/サブスクリプション)
  2. ローカル環境に「azure cli」がインストールされていること

事前準備

  • Azure VMの作成(Ubuntu)
    • この記事 を実行し、Dockerイメージ作成のためのUbuntu仮想マシンを起動していること
  • ACR の作成
    • この記事 を参考にして、Dockerイメージのプッシュ先としてのACR環境を準備していること

Ubuntu 環境設定

項目
リソースグループ rg_ituru_vm02
仮想マシン名 vm-ituru-ubuntu

仮想マシン(Ubuntu)へのログイン

## 仮想マシンの確認
$ az vm list -g rg_ituru_vm02 -d --output table
Name             ResourceGroup    PowerState    PublicIps      Fqdns    Location    Zones
---------------  ---------------  ------------  -------------  -------  ----------  -------
vm-ituru-ubuntu  rg_ituru_vm02    VM running    20.222.161.31           japaneast

## 秘密鍵の取得とパーミッションの変更
$ terraform output -raw tls_private_key > vm_ubuntu.pem
$ chmod 600 vm_ubuntu.pem

## SSH接続
$ ssh -i vm_ubuntu.pem nmcadmin@20.222.161.31
nmcadmin@ubuntu1804:~$

Azure CLI  のインストール

## Azure CLI のインストール
nmcadmin@ubuntu1804:~$ curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash
Hit:1 http://azure.archive.ubuntu.com/ubuntu bionic InRelease
Get:2 http://azure.archive.ubuntu.com/ubuntu bionic-updates InRelease [88.7 kB]
Get:3 http://azure.archive.ubuntu.com/ubuntu bionic-backports InRelease [74.6 kB]
Get:4 http://azure.archive.ubuntu.com/ubuntu bionic-security InRelease [88.7 kB]
Hit:5 https://download.docker.com/linux/ubuntu bionic InRelease          
Fetched 252 kB in 0s (737 kB/s)                                 
Reading package lists... Done
Reading package lists... Done
Building dependency tree       
Reading state information... Done
     :
    省略
     :
Get:1 https://packages.microsoft.com/repos/azure-cli bionic/main amd64 azure-cli all 2.35.0-1~bionic [73.9 MB]
Fetched 73.9 MB in 2s (29.8 MB/s)     
Selecting previously unselected package azure-cli.
(Reading database ... 77314 files and directories currently installed.)
Preparing to unpack .../azure-cli_2.35.0-1~bionic_all.deb ...
Unpacking azure-cli (2.35.0-1~bionic) ...
Setting up azure-cli (2.35.0-1~bionic) ...

## Azure CLI 確認
nmcadmin@ubuntu1804:~$ az version
{
  "azure-cli": "2.35.0",
  "azure-cli-core": "2.35.0",
  "azure-cli-telemetry": "1.0.6",
  "extensions": {}
}

仮想マシンへの java のインストール

nmcadmin@ubuntu1804:~$ sudo apt install default-jre            
nmcadmin@ubuntu1804:~$ sudo apt install openjdk-11-jre-headless
nmcadmin@ubuntu1804:~$ sudo apt install openjdk-8-jre-headless 

仮想マシンへの confluent-hub のインストール

nmcadmin@ubuntu1804:~$ sudo apt update && apt upgrade
nmcadmin@ubuntu1804:~$ wget http://client.hub.confluent.io/confluent-hub-client-latest.tar.gz
nmcadmin@ubuntu1804:~$ tar zxvf confluent-hub-client-latest.tar.gz

※※※ 再ログイン ※※※

nmcadmin@ubuntu1804:~$ confluent-hub
usage: confluent-hub <command> [ <args> ]

Commands are:
    help      Display help information
    install   install a component from either Confluent Hub or from a local file

See 'confluent-hub help <command>' for more information on a specific command.

仮想マシンへの Docker Engine のインストール

Linuxサーバー環境のDockerインストールメモ を参考に...

nmcadmin@ubuntu1804:~$ sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
nmcadmin@ubuntu1804:~$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
nmcadmin@ubuntu1804:~$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
nmcadmin@ubuntu1804:~$ sudo apt-get update
nmcadmin@ubuntu1804:~$ sudo apt-get install docker-ce
nmcadmin@ubuntu1804:~$ sudo gpasswd -a nmcadmin docker

Dockerの動作確認

※※※ 再ログイン ※※※

## Dockerバージョンの確認
nmcadmin@ubuntu1804:~$ docker --version
Docker version 20.10.14, build a224086

## Dockerコンテナの起動
nmcadmin@ubuntu1804:~$ docker run --rm hello-world

## Dockeイメージの確認
nmcadmin@ubuntu1804:~$ docker images
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
hello-world   latest    feb5d9fea6a5   6 months ago   13.3kB

Docker Image の Build

Dockerfile の作成(内容の確認)

Discover Kafka® connectors and more で必要なモジュール情報を収集し、Dockerfileを作成します。

今回は、「confluentinc/cp-server-connect-base:6.1.0」 コンテナイメージに、9つのモジュールを組み込んで見ました。

## Dockerfile の内容
nmcadmin@ubuntu1804:~$ cat Dockerfile 
FROM confluentinc/cp-server-connect-base:6.1.0
RUN confluent-hub install --no-prompt confluentinc/kafka-connect-rabbitmq:latest
RUN confluent-hub install --no-prompt confluentinc/kafka-connect-influxdb:latest
RUN confluent-hub install --no-prompt debezium/debezium-connector-mysql:latest
RUN confluent-hub install --no-prompt confluentinc/kafka-connect-azure-blob-storage:latest
RUN confluent-hub install --no-prompt confluentinc/kafka-connect-azure-blob-storage-source:latest
RUN confluent-hub install --no-prompt microsoft/kafka-connect-iothub:latest
RUN confluent-hub install --no-prompt confluentinc/kafka-connect-azure-data-lake-gen2-storage:latest
RUN confluent-hub install --no-prompt confluentinc/kafka-connect-azure-sql-dw:latest
RUN confluent-hub install --no-prompt confluentinc/kafka-connect-jdbc:latest
RUN confluent-hub install --no-prompt microsoftcorporation/kafka-connect-cosmos:latest

    # confluentinc/kafka-connect-rabbitmq:                      RabbitMQ(Source)
    # confluentinc/kafka-connect-influxdb:                      InfluxDB(Source & Sink)
    # debezium/debezium-connector-mysql:                        MySQL(Source)
    # confluentinc/kafka-connect-azure-blob-storage             BLOB(Sink)
    # confluentinc/kafka-connect-azure-blob-storage-source      BLOB(Source)
    # microsoft/kafka-connect-iothub                            IoTHub(Source & Sink)
    # confluentinc/kafka-connect-azure-data-lake-gen2-storage   Gen2(Sink)
    # confluentinc/kafka-connect-azure-sql-dw                   Azure Synapse Analytics(Sink)
    # confluentinc/kafka-connect-jdbc                           JDBC(Source & Sink)
    # microsoftcorporation/kafka-connect-cosmos                 Azure Cosmos DB (Source & Sink)

Dockerイメージビルド

## Buildの実行
nmcadmin@ubuntu1804:~$ docker build -t cp-connect-demo-cp610:1.1.1 .
Sending build context to Docker daemon  16.72MB
Step 1/11 : FROM confluentinc/cp-server-connect-base:6.1.0
6.1.0: Pulling from confluentinc/cp-server-connect-base
     :
    省略
     :
Completed 
Removing intermediate container 4529a7e5def6
 ---> 100153c40bd6
Successfully built 100153c40bd6
Successfully tagged cp-connect-demo-cp610:1.1.1


## Docker Images の確認
nmcadmin@ubuntu1804:~$ docker images
REPOSITORY                            TAG       IMAGE ID       CREATED         SIZE
cp-connect-demo-cp610                 1.1.1     100153c40bd6   2 minutes ago   2.05GB
confluentinc/cp-server-connect-base   6.1.0     061bd88f3432   7 months ago    1.83GB
hello-world                           latest    feb5d9fea6a5   7 months ago    13.3kB

Azure Container Registry (ACR) へのプッシュ

項目
Dockerイメージ名:タグ cp-connect-demo-cp610:1.1.1
ACRのリソースグループ rg_ituru_acr
ACRログインサーバー名 acr0ituru.azurecr.io
ACRロサーバー名 acr0ituru

Azure へのログイン

## 下記コマンド実行後に表示されるメッセージ内のURLをローカルPCのブラウザからアクセスし、コードを入力すればOK!
nmcadmin@ubuntu1804:~$ az login --tenant <tenant-id>
To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code HOGE2HOGE to authenticate.

## 利用するサブスクリプションの定義
nmcadmin@ubuntu1804:~$ az account set --subscription '<Subscription Name>'

ACR への イメージPush

## ACRログインサーバーアドレスの取得
nmcadmin@ubuntu1804:~$ az acr list --resource-group rg_ituru_acr --query "[].{acrLoginServer:loginServer}" --output tsv
acr0ituru.azurecr.io

## ACRへのログイン
nmcadmin@ubuntu1804:~$ az acr login --name acr0ituru
Login Succeeded

## イメージをACRにプッシュ
nmcadmin@ubuntu1804:~$ docker tag cp-connect-demo-cp610:1.1.1 acr0ituru.azurecr.io/cp-connect-demo-cp610:1.1.1
nmcadmin@ubuntu1804:~$ docker push acr0ituru.azurecr.io/cp-connect-demo-cp610:1.1.1
The push refers to repository [acr0ituru.azurecr.io/cp-connect-demo-cp610]
     :
    省略
     :
1.1.1: digest: sha256:973baf459d6e295550c6ba7717fccf4af5bdd177b2fbabd68d8440c8b03570bd size: 5366

## イメージ詳細の確認
nmcadmin@ubuntu1804:~$ az acr repository show --name acr0ituru --repository cp-connect-demo-cp610
{
  "changeableAttributes": {
    "deleteEnabled": true,
    "listEnabled": true,
    "readEnabled": true,
    "teleportEnabled": false,
    "writeEnabled": true
  },
  "createdTime": "2022-04-09T16:42:26.6041355Z",
  "imageName": "cp-connect-demo-cp610",
  "lastUpdateTime": "2022-05-11T01:52:57.5399684Z",
  "manifestCount": 2,
  "registry": "acr0ituru.azurecr.io",
  "tagCount": 2
}

## イメージタグの確認
nmcadmin@ubuntu1804:~$ az acr repository show-tags -n acr0ituru --repository cp-connect-demo-cp610 --output table
Result
--------
1.1.0
1.1.1

## イメージ一覧の表示
nmcadmin@ubuntu1804:~$ az acr repository list --name acr0ituru --output table
Result
----------------------
cp-connect-demo-cp610

まとめ

これで、Kafka/ConfluentのConnectorに各種モジュールを組み込み、ACRにプッシュする仕組みができました。 Confluent Platform をコンテナアプリケーションとしてKubernetes(AKS等)での実行を前提に CI/CD に組み込んでいきたいですね、、、、

参考記事

以下の記事を参考にさせていただきました。感謝申し上げます。
Linuxサーバー環境のDockerインストールメモ

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0