Apache Kafkaシリーズ ~Kafkaにおける重要な Producer パラメーター一覧~

kafka
★★★ お知らせ ★★★

◆ エンジニア業務環境アンケート結果 ◆
エンジニアが自分の働き方にどういったことで満足していて、不満を感じているのか、働きたい会社像として何を求めているのか、業務環境調査を実施しました。ぜひご覧ください。
アンケート結果はこちらから

みなさんこんにちは!今回はKafkaにおけるパフォーマンス向上のために Producer をどのように設定するかについて解説していきます。

 

Producer の重要な設定

 

Kafkaを運用していくうえで重要な要素として「スループット」と「耐障害性」があげられます。

二つの要素をどちらも向上させていくことが理想ですが、トレードオフ(どちらかを良くすると、もう一方は性能が悪くなる)の関係であるため、ユースケースに応じてどちらが優先されるかを決めていくことが大切です。

 

Producer に限らずですが、Kafkaではスループット、耐障害性に関するパラメーター値を利用シーンに応じて変更(チューニング)することができます。

 

そこで今回はスループットと耐障害性の最適化のためのチューニングできるProducerパラメーター値を、重要なものだけに限定して解説していきます。

 

スループット面

スループットでは、メッセージをいかに効率よく送信できるか、という指標となっています。効率性を重視したパラメーター値の一例として以下があります。

batch.size

batchに入る量の上限値で、デフォルトは16KBです。

多くのデータが流入してくる場合にこの値を大きくするとスループットが向上します

linger.ms

batchにデータを入れる時間をどれくらい延長するかを決定します。デフォルトは0msです。

batch化する時間をコントロールする役割ですが、スループット向上にはあまり使われません。

batch.sizeが大きくできない状況で、意図的にbatchを満タンにしてから送信する、等の場合に使われます。

 

なお、batchデータ送信の条件は以下の通りです。

  • データを入れるbatchがbatch.sizeに達した場合
  • データを入れるのにかかった時間がbatch化する所定の時間+linger.msを超えた場合
  • batch化する所定の時間にも設定値が存在しますが、ここでは省略します。

compression.type

Producerはデータに対し圧縮することが可能です。大量データを圧縮して負荷を下げることでスループットが向上します。

圧縮の種類はgzip, snappy, lz4, zstdの4種類から選択できます。

 

耐障害性面

Kafkaのもう一つ重要な側面として耐障害性があります。これはいかにメッセージが失われない、もしくは同じメッセージが増えないようにするか、という指標になっています。

 

ここでも重要な設定値は赤色で示します。

acks

Brokerが正常にメッセージを処理できたら、Producerにackを返します。ackの返し方は以下の3つの方法があります。

ちなみにですが、Brokerがメッセージを処理することを「commitする」と言います。commitについてはBroker編でまたお伝えします。

  • Acks=0・・・Brokerに確認をさせない(スループット最優先

 

 

 スループットは非常に高いですが、メッセージが失われる危険性があります。

  • Acks=1・・・Leader Brokerのみメッセージを処理したか確認をさせる

 

ack=0よりは耐障害性がありますがリーダーだけackを送るため、フォロワーが複製できているかの保証がありません。

 

  • Acks=all・・・Followerも含めた全てのReplicaからメッセージが処理できたか確認をさせる(耐障害性の担保)

耐障害性の観点からは、この設定値が一番推奨されます

 

retry

エラーに応じてメッセージを再送信する回数を調整しますが、通常はこの設定値を調整することはありません!

 

idempodence

メッセージが重複するのを防ぐ設定値です。

 

エラーで送れなかったメッセージが正常に送信されていた場合、もう一度送信するとメッセージ被りが起きてしまうことがあります。

Idempodenceを有効にすることで、再び同じメッセージを送った時に複製判定を検知してそのメッセージを削除します。

なお、ここでは正常に処理したことの確認でAckを使用しているため、Ack=1もしくはallに設定するようにしてください!

 

まとめ

この記事では、「Producer」においてスループット、耐障害性を向上する上でどのような設定値が重要なのかを解説しました。

 

次回ではKafkaからデータを受け取る役目であるConsumerについて解説していきたいと思います!

 

最後まで読んでいただきありがとうございました!





ご覧いただきありがとうございます。
ブログの最新情報はSNSでも発信しております。
ぜひTwitterのフォロー&Facebookページにいいねをお願い致します!



>> 雑誌等の執筆依頼を受付しております。
   ご希望の方はお気軽にお問い合わせください!


ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

0人がこの投稿は役に立ったと言っています。

Be the first to comment

Leave a Reply

Your email address will not be published.


*


質問はこちら 閉じる