1
/
5

Kafka運用の効率化を目指した取り組みの紹介

こんにちは! アイムデジタルラボの採用広報担当です。三越伊勢丹では社内のシステム間連携をApache Kafka(以下Kafka)による非同期ストリーミングで行っています。Kafkaの運用を効率化するために、どのようなツールを使っているのか、について記事にまとめました。ぜひ最後までご覧ください!

以前、Kafkaを使った決済システムリリースについて記事をまとめていますのでそちらも併せてご覧いただけると嬉しいです。

▼前回の記事はこちら

Kafkaとルールエンジンを活用した決済システム構築の紹介 | 株式会社IM Digital Lab(アイムデジタルラボ)
こんにちは!アイムデジタルラボの採用広報担当です。今回は、最近リリースされた決済システムについて、エンジニアメンバーに記事を書いてもらいました。ぜひ最後までご覧ください!プロジェクトの背景三越伊...
https://www.wantedly.com/companies/company_129530/post_articles/530789

Kafka活用にあたっての課題と改善

三越伊勢丹では、一部のデータ連携では非同期ストリーミングを利用しており、その実現のためにKafkaを導入しています。Kafkaは、リアルタイムのイベント駆動型アプリケーションの開発を可能にするオープンソースの分散ストリーミング・プラットフォームです。

非同期ストリーミングの導入目的としては2点です。1点目はデータをリアルタイムに処理することができる点と、システム間の結合度を疎に保つことができる点です。社内で使われている各システムは稼働状況や処理能力が異なりますが、Kafkaをデータ連携に利用することで、見通しの良い仕組みを実現できる環境を作ることができます。Kafaで連携をしていたメッセージは当初10トピック(Topic)から開始され、現在では50トピック以上になっており、今後さらに数が増えることが予想されます。

Kafkaを使いこなすのは適切なパラメータ設定が必要です。ところが、Kafkaに付属している管理ツールでは、専用のコマンドを覚えるところから始める必要があり非効率でした。そこで、開発者にとっての運用負担を下げ、本来の開発に集中できるよう、Kafkaの操作や設定変更を容易に行える管理ツールの選定、導入を行いました。

クラウドサービスとオープンソースを組み合わせて活用する

選定にあたって注意したのがセキュリティとガバナンスです。三越伊勢丹は小売業なので売上データや会員データには個人情報が含まれている。そうしたデータの扱いには慎重になる必要があります。そこでユーザー単位で権限制御が可能であることが必須でした。

管理ツールを考えるためにも、あらためてKafkaのマネージドサービスから再検討しました。Kafkaの場合、管理ツールも含めて、エンタープライズグレードの運用に耐えられるマネージドサービスも存在しています。しかし、三越伊勢丹では、これからKafkaに取り組もうとしている状況なので、あまり、大きな投資は避けたいという思いがありました。

その点で、AWSのAmazon MSK Serverless (Amazon Managed Streaming for Apache Kafka)であれば、完全な従量課金制で小規模のスタートには最適でした。また、MSKの認証とTopicなど各種リソースへのアクセス制御にAWSのIAMが利用可能なのも大きなメリットでした。ただし、MSKではKafkaの管理ツールが提供されていません。そこで、Kafkaのマネージドサービスは MSK Serverless を選択し、管理ツールはオープンソースの管理ツールを導入することにしました。

管理ツールとして、初期はAKHQを試用しましたが、必要な権限制御ができないことから、途中でKafka-UI(UI for Apache Kafka)に変更しました。実はKafka-UIは、初期検討時には未成熟で候補から外れていたのですが、次の見直し時期には非常に洗練されていました。

活用するだけでなくオープンソースに貢献する

ただし、MSK Serverlessの導入時期が一般提供(2022/4/28)の直後になったこともあり、各種周辺ツールの対応が間に合っていませんでした。

Amazon MSK Serverless が一般提供開始 - マネージド Kafka クラスターのキャパシティープランニングが不要に | Amazon Web Services
2022 年 4 月 28 日(米国時間)、Amazon MSK Serverless の一般公開を開始し、容 [...]
https://aws.amazon.com/jp/blogs/news/amazon-msk-serverless-now-generally-available-no-more-capacity-planning-for-your-managed-kafka-clusters/

具体的なところでは、IaCツールTerraformのAWS Provider( https://github.com/hashicorp/terraform-provider-aws )がMSK Serverless に未対応だったためリソースの作成が自動化できませんでした。

そのため、MSK Serverless をサポート可能にするための修正案として、Pull Requestを作成しました。

Add support for AWS MSK serverless cluster type by moremagic · Pull Request #25684 · hashicorp/terraform-provider-aws
Community Note Please vote on this pull request by adding a 👍 reaction to the original pull request comment to help the community and maintainers prioritize this request Please do not leave "+1" or other comments that do not add relevant new information o
https://github.com/hashicorp/terraform-provider-aws/pull/25684

実際にはメンテナの対応方針と齟齬があったため修正自体を直されてしまいましたが、Terraform での MSK Serverless 対応を後押しするための一助となったのではないかと考えています。

初期にAKHQを導入検討していた際も、いくつかのPull Requestを作成しました。例えばAmazon MSKへのアクセスをするための依存ライブラリの追加と、接続のためのドキュメントを整備するPull Requestを作成し、採用されました。

Add a dependency library to enable IAM access control for MSK(#810) by moremagic · Pull Request #948 · tchiotludo/akhq
Support for https://docs.aws.amazon.com/msk/latest/developerguide/iam-access-control.html
https://github.com/tchiotludo/akhq/pull/948

また、MSK Serverless に接続するとうまく動かない点がいくつかありましたので、ソースコードを読みながら該当箇所の修正を行い、Pull Requestを作成し、採用されました。

Fix topic display error for MSK Serverless by moremagic · Pull Request #1113 · tchiotludo/akhq
The API support status of MSK Serverless can be checked as follows $ ./kafka-broker-api-versions.sh --bootstrap-server $BS --command-config client.properties *************.amazonaws.com:9098 (id: 153 rack: null) -> ( Produce(0): 7 to 9 [usable: 9], Fetch(
https://github.com/tchiotludo/akhq/pull/1113
Issue #1226 Fix NPE occurs when trying to view cluster information in MSK Serverless by moremagic · Pull Request #1227 · tchiotludo/akhq
fix #1226 When I try to display cluster information in MSK Serverless, I get a NullPointerException. So, if I can't get the Node information, I used the default constructor of the Node class to work around the problem
https://github.com/tchiotludo/akhq/pull/1227

さらに、AKHQでGithub( github.com )認証をサポートするための修正を作成し、採用されました。

Github SSO / OAuth2 support by moremagic · Pull Request #1319 · tchiotludo/akhq
Added support for Github SSO/OAuth2 see : #990
https://github.com/tchiotludo/akhq/pull/1319

Kafka-UIでも、バグを見つけたため、修正のPullRequestを作成し、採用されました。

FE: Fix active controller badge on invalid node by moremagic · Pull Request #4085 · provectus/kafka-ui
Breaking change? (if so, please describe the impact and migration path for existing application instances) What changes did you make? (Give an overview) Fixes #3614 Is there anything you'd like reviewers to focus on? How Has This Been Tested? (put an "x"
https://github.com/provectus/kafka-ui/pull/4085

オープンソースの良い点は、コードが公開されており、問題が発生したときなどに自分たちで直すチャンスが与えられている部分なので、積極的に活用し、かつ貢献する姿勢で取り組んでいます。

MSK Serverlessの場合はでき上がったばかりのサービスだったため、公式ドキュメントにも書かれていないような小さなことを、ひとつひとつ確認しながら疑問を解消していく必要がありました。運用で問題が発生したときにオープンソースの管理ツールの問題なのか、MSK Serverless側の問題なのか、粘り強く検証したことで双方について知識が深まったと思います。

社内でより活用される環境整備を目指して

現在、社内でKafka-UIを利用する際には権限付与の申請をして、設定反映後に使用してもらう流れになっていますが、申請からKafka-UIを使うまでのフローを自動化し、さらなる運用負荷の軽減を目指しています。また、ツールは常に新しいものが出てきているので、Kafka-UIよりも使いやすいものがあった場合は、より良いツールの検討も必要になると思います。選定したツールで満足することなく、常に最新情報をキャッチアップしながら最適化を進め、開発者にとってより使いやすく、よりモダンな環境を引き続き目指していきたいと考えています。

まとめ

三越伊勢丹のDXを推進する組織として、テクノロジーを積極的に活用するアイムデジタルラボ。現場の状況を俯瞰し、OSSも積極的に活用しながらシステムのモダン化を進め、三越伊勢丹らしい未来の買い物体験を提供することに挑戦しています。上記でお伝えしたようなOSSへの変更要求に時間を割くことも業務内で認められていますし、何よりも膨大データを扱う環境を整備することは大きなやりがいにつながります。

Kafka導入から2年が経ち、培われてきたナレッジを定型化することでグループ内での横展開も進み、先日はグループ会社IMSの新卒メンバーに対してKafkaの研修を行いました。OSSに関わりながら仕事をしたい、エンジニアとして開発に携わりながらOSSの開発に貢献する仕事に興味がある、という方は是非一緒にお仕事しましょう。

いかがでしたでしょうか? アイムデジタルラボでは、新しい技術を活用したDXの推進をしています。ご興味のある方は、ぜひお気軽にご応募ください!

株式会社IM Digital Lab(アイムデジタルラボ)では一緒に働く仲間を募集しています
同じタグの記事
今週のランキング