Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Strimzi Kafka Operator を試す Part 3 / Try Strimzi Part3

suzukiry
January 31, 2022

Strimzi Kafka Operator を試す Part 3 / Try Strimzi Part3

suzukiry

January 31, 2022
Tweet

More Decks by suzukiry

Other Decks in Technology

Transcript

  1. Strimzi Kafka Operator を試す
    Part 3 Kafka Connect
    - 補足資料 -

    View Slide

  2. Kafka Connect

    View Slide

  3. Kafka Connect とは
    ● Apache Kafkaと外部システム、例えばデータベース、ストレージ、メッセージングシ
    ステムとを連携することができるKafkaのエコシステムに含まれるコンポーネントで
    す。
    ● 外部システム → Kafka へ連携:Source と呼ぶ
    ● Kafka → 外部システムへ連携:Sink と呼ぶ
    ETL処理で言う
    Extract相当
    ETL処理で言う
    Load相当

    View Slide

  4. Kafka Connect を使う理由
    ● スケーラブル
    ○ Kafka のクラスタ上で動作することとから、Kafka Brokerと同じくスケーラビリ
    ティと信頼性を維持しながら、大量のデータをKafkaのBrokerへ出し入れする
    ためのフレームワークを提供。
    ● Zero-Code Streaming Pipeline
    ○ “For Kafka Connect no coding is required. Just write configuration files”と
    言われているように、Kafka Connectのフレームワークを利用し、提供プラグイ
    ンを利用することで、分散処理・管理の開発をKafka Connect自体に任せてし
    まうことができる。

    View Slide

  5. Kafka Connect 分散処理の仕組み
    1. Worker
    ● ConnectorとTaskを実行するプロセス
    2. Connector:
    ● タスクの作成を担当。
    3. Task:
    ● 実際にデータをコピーするアクター。状態は専用トピックで管理され、耐障害性も考慮。
    REST API、設定管理、信
    頼性、高可用性などを担

    データ移動を担当
    Kafka Connectのメリットは、これらの障害処理を担当してくれ
    るところ。コネクタを作成する場合は、作成にのみ
    注力できるのが良い。
    Worker
    Connector
    Task
    Worker-1
    Connector-1
    Task-1
    (Conn1)
    Task-2
    (Conn1)
    Worker-2
    Connector-2
    Task-3
    (Conn1)
    Task-1
    (Conn2)
    Worker-3
    Taskの数は、tasks.maxによって指定。
    全クラスタノード上でいくつの Taskかを決める。
    Thread
    JVM
    Process
    https://www.slideshare.net/vitojeng/streaming-process-with-kafka-connect-and-kafka-streams-80721215

    View Slide

  6. Note: 分散処理の仕組み - パラメータ:tasks.max
    ● Connectorで作られるタスク数の最大数
    ○ Source Connector の場合はその対象(テーブル、ファイルなど)、 Sink Connector の場合はTopic
    のPartition数を気にしながら設定すべき。
    ○ Source の場合
    ■ テーブル毎の割り当て
    ● テーブルx3・タスクx3であれば、各タスクで 1テーブルを担当する。
    ● テーブルx6・タスクx2であれば、各タスクで 3テーブルを担当する。
    ● テーブルx1・タスクx2であれば、1タスクのみ1テーブルを担当する。(つまり別の 1タス
    クは無駄になる)
    ○ Sink の場合
    ■ 対象Topicのパーティション数次第。
    ● Sink タスク(=Consumer)は Partition の数より多く持つことができない。
    ● 高スループットにしたい場合は、パーティション数 =タスク数( パーティション数<タスク
    数だとアイドルするだけ )
    ● パフォーマンスを下げて良い場合は、 パーティション数>タスク数 の設定もOK.

    View Slide

  7. Kafka Connect の機能
    Producer
    Kafka Connect (Source)
    Connector
    Kafka Cluster
    SMTs Converter
    Kafka Connect (Sink)
    Converter
    Kafka Cluster
    SMTs Connector
    Consumer/
    App
    1. Connector
    対象のデータストアへの接続を担う
    2. SMT(Single Message Transformations)
    フィルタやメタデータの追加などが行う
    3. Converter
    データのシリアライズ・デシリアライズを行う

    View Slide

  8. Note: SMTs (Single Message Transformation)
    ● 各メッセージに対して変換処理を行う機構
    ○ 複数メッセージの結合や Joinは行えない(ここはKafka Streamsが担当)
    ● 主な変換処理の例
    ○ フォーマット変換
    ■ Timestamps
    ■ Value masking
    ■ Numeric types
    ■ Name adjustments
    ○ フィルター・ルーティング
    ■ Source Connector が書き込む Topic 名や、Sink Connector がターゲットに作成するオブ ジェ
    クト名を変更したい場合、 RegExRouterが使える。
    ○ スキーマの一貫性の確保
    ○ Tombstoneハンドリング
    https://www.morling.dev/blog/single-message-transforms-swiss-army-knife-of-kafka-connect/

    View Slide

  9. Kafka Connect の起動
    1. プラグインが、Sink Connector を提供
    2. 1つのWorkerが Sink Connector のインスタンスを
    起動
    3. Sink Connector は、データをストリームするための
    Task を作成
    4. Task は並行して実行され、 Kafkaをポーリングして
    メッセージを取得
    5. Transform で、必要に合わせてメッセージを調整
    (SMTのところ)
    6. Converter は、メッセージをKafka Brokerに適した形
    式に変換
    7. Source Connectorは、Kafka Connect API または
    KafkaConnectors を使用して管理します。
    参考:https://strimzi.io/docs/operators/latest/overview.html

    View Slide

  10. Kubernetes & Operatorでの実行方法の違い
    ● Non-Kubernetes の場合
    1. Workerの立ち上げ(スタンドアロンor分散モード)
    ■ クラスタ構成を指定。
    2. ConnectorをREST APIで起動
    ■ コピー対象のDB・テーブル、タスク数を指定。
    ■ ここでの設定によって、タスクがどのテーブルを担当するのかが決まる。 ※タスクの起動は、Connectorが勝
    手に行う。
    ● Strimzi Operator を使う場合
    1. KafkaConnect カスタムリソースの作成
    ■ Strimziが裏でクラスタを作ってくれます。
    2. KafkaConnector カスタムリソースの作成
    ■ KafkaConnector カスタムリソースに利用したいプラグインやタスク数の設定を記載します。
    ■ Strimziが裏でREST APIでの設定部分を補ってくれます。 Connector 設定もKubernetesライクに設定すること
    ができます。

    View Slide

  11. Kafka Connect の商用サポート
    ● Kafka Connectのコネクター
    ○ 自前で作成する or
    ○ オープンソースを使う or
    ○ 商用サポートされているものを使う
    ● 各社のConnectorのサポート
    ○ Red Hat (Debezium, Camel Kafka Connector)
    ○ Cloudera (HDFS Sink Connector、Amazon S3 Sink Connector)
    ○ Confluent (120+ものConnectorを取り揃えている [1])
    ○ Amazon MSK ?
    ○ Heroku ?
    それぞれ商用サポートするコネクターは異なる。
    なので、使用したいコネクターのサポートをそれぞれ確認することが大事。
    [1] https://www.confluent.io/product/connectors/#commercial

    View Slide

  12. Debezium
    ● Apache Kafka の Kafka Connect(Source側) を利用
    ● 複数のデータベース向けのチェンジデータキャプチャ
    ○ トランザクションログベース
    ○ スナップショット、フィルタリング などの用途にも利用
    参考:https://debezium.io/documentation/reference/stable/architecture.html

    View Slide

  13. オープンソースの範囲
    ● MySQL
    ● PostgreSQL
    ● SQL Server
    ● Mongo DB
    ● Db2
    ● Oracle
    ● Cassandra
    ● Vitess
    Debeziumのサポート
    Note:
    ←2021年12月時点でDev Preview
    からTech Previewへ。GAはまだです
    が、大きく期待
    Red Hat Integration の範囲
    ● MySQL
    ● PostgreSQL
    ● SQL Server
    ● Mongo DB
    ● Db2
    ● Oracle
    ● Cassandra
    ● Vitess

    View Slide

  14. 環境

    View Slide

  15. my-kafka-project
    構成図
    kafka-operator
    my-cluster3
    tls-sidecar
    Zookeeper
    topic-operator
    user-operator
    tls-sidecar
    connect-
    cluster Consumer
    Strimzi-
    kafka-
    operator
    message
    message
    名前空間
    kafkaconnect
    kafkaconnector
    kafka
    License
    (送信用ファ
    イル)

    View Slide

  16. その他

    View Slide

  17. AMQ Streams
    ● Apache Kafka のエンタープライズ向けディストリビューション
    ○ 2018年から Kafka をサポート、Kubernetes 上でも提供 (Strimzi)
    ○ Red Hat AMQ Streams としてローンチ
    ● 提供形態
    ○ Red Hat Enterprise Linux
    ○ Red Hat OpenShift Container Platform
    Apache Kafka on Kubernetes 基礎編 ワークショップ:
    https://redhat-open.connpass.com/
      Strimzi/AMQ Streamsをハンズオンをしてみたい

    View Slide

  18. Thank you

    View Slide