kafka docのbrokerconfigsにある設定をまとめてみた。

なお、対象バージョンは0.10.0です。また、正確に理解出来ていない箇所があるので正確な情報が欲しい場合はkafka公式かkafkaのソースコードを見てください。

設定の重要度がhigh, medium, lowの3つに分けてあるのでhighを手厚く調べる。設定項目が全部で130個くらいあるので重要度毎に表を分割してます。
あと、数個DEPRECATEDの設定があったが、他に対応する項目が用意されているので項目から除外している。

重要度highの設定

重要らしいのでサラッと見て必要な設定はしたほうがいいと思われる設定。ついでに、どんな機能があるのかが設定項目からイメージできるはず。

NoNameDescriptionDefault設定例
1zookeeper.connectBrokerが接続するZKホストのリストをカンマ区切りで指定する。-hostnameOrIp:port
2advertised.listenersクライアントが使うためにZKに公開するリスナー。nullhostnameOrIp:port
3auto.create.topics.enable自動トピック作成を有効にする。true
4auto.leader.rebalance.enable自動リーダーバランシングを有効にする。定期的に必要に応じてバックグラウンドスレッドがリーダーのバランシングをチェック・トリガします。Topicのパーティションごとにリーダーが割り当てられるのでこのリーダーのバランシングを自動的に動かすかどうかが設定できるようです。true
5background.threads種々のバックグラウンド処理タスクに割当てるスレッド数。10
6broker.idBrokerを一意に識別するための数値。-1100
7compression.typeTopicの最終的なデータ圧縮方式。gzip/snappy/lz4の標準的なものが使える。圧縮しない、オプションを指定することでProducerが圧縮した方式を保持することが出来る。Broker側で圧縮するのかProducer側で圧縮してから送るのかは要件次第だが、Kafkaが必要になるケースではProducer側から膨大なデータが送信されるようなことが想定できるのでProducer側で圧縮したほうがネットワークの負荷を下げられる気がする。デフォルト値はproducerと記述があるのでProducer側で圧縮している模様。producernone or gzip or snappy or lz4
8delete.topic.enableトピック削除を有効にするか。false
9leader.imbalance.check.interval.secondsコントローラによってトリガされるパーティションのリバランスチェックの頻度。秒で間隔を指定する。300
10leader.imbalance.per.broker.percentageブローカー毎に不均等なリーダー割り当てを許す割合。指定された値を上回ったときにコントローラがリバランスをトリガする。値はパーセンテージで指定する。10
11listenersリスナーのリスト。リッスンするURIとプロトコルのリストをカンマ区切りで指定する。全てのI/Fにバインドする場合は0.0.0.0の様に指定し、デフォルトのI/Fを指定する場合は空のホスト名を指定する。nullPLAINTEXT://myhost:9092,TRACE://:9091
12log.dirログを保存するディレクトリ。log.dirsの補助。/tmp/kafka-logs
13log.dirsログを保存するディレクトリ。値が設定されてない場合はlog.dirを使う。null
14log.flush.interval.messagesメッセージをディスクにフラッシュする前にログパーティションに蓄積できるメッセージ数。ログパーティションに保存するメッセージ数を制限する必要がある場合に設定する感じか。9223372036854775807[1,…]
15log.flush.interval.msディスクにフラッシュする前にトピックでメッセージを保持する最大時間(ms)設定されていない場合はlog.flush.scheduler.interval.msを使う。null
16log.flush.offset.checkpoint.interval.msログのリカバリポイントとして機能する最後のフラッシュの記録の永続化を更新する頻度。デフォルトでは60秒間隔でログのリカバリポイントがディスクにフラッシュされる。0を指定した時はどうなるんだろ。60000[0,…]
17log.flush.scheduler.interval.msディスクにフラッシュする必要があるかもしれないログをフラッシャーがチェックする頻度。単位ms。デフォルトの設定だとチェックしない。フラッシュする頻度が細かく設定できるがどの程度パフォーマンスに影響するのかは調べる価値がありそう。9223372036854775807
18log.retention.bytesログを削除するしきい値として最大サイズをbyteで指定する。デフォルトでは-1が設定されているので削除しないっぽい。おそらくディスクフルになるのを防ぐ用途で使うっぽい。どう削除されるのかは気になる。古いものから?-1
19log.retention.hoursログを保持する時間を指定する。時間をトリガにデータを削除できる。デフォルトでは7日。1ヶ月保持したければ720を指定する。168
20log.retention.minutesログを保持する時間を分で指定する。指定されていない場合はlog.retention.hoursが利用される。null
21log.retention.msログを保持する時間を分で指定する。指定されていない場合はlog.retention.minutesが利用される。null
22log.roll.hours新しいログセグメントがロールアウトされるまでの時間。168[1,…]
23log.roll.ms単位がmsになっただけで上と同じ。null
24log.roll.jitter.hoursログをロールするまでの揺らぎ幅。指定した時間内でログをロールしますよという意味だと思われる。0[0,…]
25log.roll.jitter.ms単位がmsになっただけで上と同じ。null
26log.segment.bytes1つのログファイルの最大サイズ。デフォルトは1GB。1073741824[14,…]
27log.segment.delete.delay.msファイルシステムからファイルを削除するまでに待機する時間。60000[0,…]
28message.max.bytesサーバが受信できるメッセージの最大サイズ。デフォルトは0.95MB。デフォルトの数字はどこから出てきたんだろうか。1000012[0,…]
29min.insync.replicasプロデューサーのACK=all(or -1)要求を満たすために必要なISRのレプリカ最小数。1[1,…]
30num.io.threadsサーバがネットワークリクエストを捌くためのIOスレッドの数。8[1,…]
31num.network.threadsサーバがネットワークリクエストをハンドリングするために使うネットワークスレッドの数。3[1,…]
32num.recovery.threads.per.data.dirログのリカバリー開始時とシャットダウン時のフラッシングに使うデータディレクトリ毎のスレッド数。1[1,…]
33num.replica.fetchersソースブローカーからメッセージを複製するために使うフェッチ用スレッドの数。この値を大きくするとフォロワーブローカのI/O並列度を高めることができます。1
34offset.metadata.max.bytesコミットオフセットに関連付けられているメタデータエントリの最大サイズ。4096
35offsets.commit.required.acksコミットされる前にacksの要求を許可することが出来ます。一般的にデフォルトの-1を書き換えるべきではありません。Kafkaのフォロワーにメッセージが同期される前にメッセージを取り出すことを許可するという意味だと思われる。危なそう。-1
36offsets.commit.timeout.msオフセットのコミットは全てのレプリカがオフセットトピックのコミットを受け取るか、タイムアウトになるまで延期されます。これはプロデューサーの要求のタイムアウトに似ています。デフォルトの5秒。つまり、5秒間経過しても全てのレプリカにコミットされなかったらオフセットに対してコミットを行わないので何もなかったことになります。5000[1,…]
37offsets.load.buffer.sizeキャッシュにオフセットをロードするときのオフセットセグメントからの読み取りのためのバッチサイズ。単位はバイト。Kafkaの文脈で出てくるBatchという言葉はストレージからキャッシュにデータを移すことを指しているっぽい。5242880[1,…]
38offsets.retention.check.interval.ms古くなったオフセットをチェックする頻度。デフォルトでは10分に1回。600000[1,…]
39offsets.retention.minutesトピックのオフセットの保持ウィンドウを記録する時間を指定する。デフォルトでは1日に1回。正しく理解出来ていない気がしますが、オフセットの保持状況をログに出力する頻度でしょうか。1440[1,…]
40offsets.topic.compression.codecトピックのオフセットの圧縮コーデックを指定する。圧縮は「アトミック」コミットを果たすために使用されるかもしれません。intで何を指定するのかは不明。0
41offsets.topic.num.partitionsオフセットのコミットトピックのパーティション数。デプロイ後に変更するべきではない。デフォルト50。50もいるのかなと直感的に思った。50[1,…]
42offsets.topic.replication.factorトピックのオフセットのレプリケーション数。可用性を確保するのであれば高く設定すること。トピックのオフセットが効果的にレプリケーションが確実に行われることは生きているブローカー数はトピックのオフセットに最初のリクエストがあった時にレプリケーションされている値を設定することです。もし、そうでなければトピックのトピックの作成のいずれかが失敗するか、またはそれは生きているブローカーで構成された最小のレプリケーションを取得します3[1,…]
43offsets.topic.segment.bytesキャッシュの読み込みとログの圧縮が早く容易に出来るように、トピックのオフセットは小さく保たれるべきです。要は出来るだけ小さく設定したほうがパフォーマンスが出来ますよということだと思われる。デフォルトは1GB。104857600[1,…]
44queued.max.requestsネットワークスレッドがブロックされる前に許可されるキューされるリクエストの最大数。500[1,…]
45quota.consumer.defaultconsumerが毎秒フェッチ出来るデータ量で絞ることができる。9223372036854775807[1,…]
46quota.producer.defaultproducerから送信されるデータ量を毎秒で絞ることが出来る。9223372036854775807[1,…]
47replica.fetch.max.bytesフェッチ出来るメッセージの最大バイト数。1048576
48replica.fetch.min.bytesフェッチレスポンスの最小サイズを指定します。十分なバイト出ない場合、replicaMaxWaitTimeMsまで待ちます。1
49replica.fetch.wait.max.msフォロワーのレプリカに発行された各フェッチ要求の最大待ち時間。この値は常に低いスループットのトピックのためのISRで頻繁な収縮を防ぐために、すべての回でreplica.lag.time.max.ms未満でなければなりません。500
50replica.high.watermark.checkpoint.interval.mswatermarkをディスクに書き出す頻度。 watermarkが何を示すのかよくわからない。5000
51replica.lag.time.max.msもし、フェッチリクエストがフォロワーに送信されていない場合またはリーダーが消費していない場合はリーダーはISRからフォロワーを削除します。10000
52replica.socket.receive.buffer.bytesネットワークリクエストを受けるソケットのバッファーサイズ。65536
53replica.socket.timeout.msソケットのネットワークリクエストのタイムアウト時間。30000
54request.timeout.msクライアントがリクエストの応答を待つ最大時間を制御する設定。応答がタイムアウトする前に受信されない場合は、必要に応じて経過するクライアントが要求を再送信するか、または再試行回数を使いきった場合はリクエストが失敗します。30000
55socket.receive.buffer.bytesソケットサーバソケットのSO_RCVBUFバッファ。102400
56socket.request.max.bytesソケットリクエストの最大バイト数。104857600[1,…]
57socket.send.buffer.bytesソケットサーバソケットのSO_SNDBUFバッファ。102400
58unclean.leader.election.enableデータが失われる可能性がある時、苦肉の策としてISRセットでリーダーとして選出されるべきではないレプリカを有効にするかどうかを示します。true
59zookeeper.connection.timeout.msクライアントがZKに接続を確立するために待機する最大時間。設定しない場合zookeeper.session.timeout.msが使われる。null
60zookeeper.session.timeout.msZKセッションのタイムアウト時間。6000
61zookeeper.set.aclクライアントにセキュアなACLを設定する。どんなACLなのかは不明。デフォルトは使用しない設定。false

重要度mediumの設定

以下は重要度mediumの設定なのでさらさらっと流す。
バックグラウンドで動作するスレッドの設定がいくつかあったり、SSLを使うための設定がある。

NoNameDescriptionDefault設定例
62broker.id.generation.enableサーバーでブローカーのIDの自動生成する。true
63broker.rackブローカーの物理的なラックを指定する。ラックを意識したレプリカの持ち方になる。Examples: ‘RACK1’, ‘us-east-1d’null
64connections.max.idle.msアイドルのコネクションのタイムアウト設定。600000
65controlled.shutdown.enableサーバシャットダウンのコントロール。true
66controlled.shutdown.max.retriesサーバ再起動に失敗した場合の再実行回数の指定。3
67controlled.shutdown.retry.backoff.ms再試行までの待機時間。5000
68controller.socket.timeout.msコントローラ-ブローカーチャンネルのソケットタイムアウト時間。30000
69default.replication.factorレプリカ数を未指定時に自動的に作成されるトピックのレプリカ数1
70fetch.purgatory.purge.interval.requestsフェッチリクエストのパージするリクエスト回数。1000
71group.max.session.timeout.ms登録されたconsumerのための最大許容セッションタイムアウト秒数。300000
72group.min.session.timeout.ms登録されたconsumerのための最小許容セッションタイムアウト秒数。6000
73inter.broker.protocol.versionブローカーが扱うプロトコルのバージョンを指定する。Example: 0.8.0, 0.8.1, 0.8.1.1, 0.8.2, 0.8.2.0, 0.8.2.1, 0.9.0.0, 0.9.0.10.10.0-IV1
74log.cleaner.backoff.msログがないときはスリープ状態とする秒数。15000[0,…]
75log.cleaner.dedupe.buffer.sizeクリーナースレッドでログの重複排除のために使用されるメモリ量。134217728
76log.cleaner.delete.retention.msクリーナーでレコードがどれくらい保持され削除されるか。86400000
77log.cleaner.enableログクリーナープロセスを有効にするか。true
78log.cleaner.io.buffer.load.factor設定した負荷(%)を超えた時にクリーナー重複排除のバッファ負荷率を記録する。0.9
79log.cleaner.io.buffer.sizeすべてのクリーナースレッドのI/Oがバッファに使用される総メモリ量。524288[0,…]
80log.cleaner.io.max.bytes.per.second書き込みI/Oの合計が平均を超えた時に小さくなるように絞られます。1.7976931348623157E308
81log.cleaner.min.cleanable.ratioクリーニング対象ログの合計に占める汚染ログ最小割合。0.5
82log.cleaner.threadsログのクリーニングに使われるバッググラウンドスレッドの数。1[0,…]
83log.cleanup.policy保持ウィンドーを超えた場合のデフォルトのクリーンアップポリシー設定。delete[compact, delete]
84log.index.interval.bytesオフセットインデックスにエントリを追加する間隔。4096[0,…]
85log.index.size.max.bytesオフセットのインデックスの最大サイズ。10485760[4,…]
86log.message.format.versionブローカーがログにメッセージを追加するために使用するメッセージフォーマットのバージョンを指定する。0.10.0-IV1
87log.message.timestamp.difference.max.ms指定されたタイムスタンプとBrokerが受信した時のタイムスタンプの違いでメッセージを許可することが出来ます。その許容するタイムスタンプの差を設定します。9223372036854775807[0,…]
88log.message.timestamp.typeログが追加された時間かメッセージが作成された時間か、タイムスタンプの形式を指定します。CreateTime[CreateTime, LogAppendTime]
89log.preallocate新しいセグメントを作成するときに事前にファイルを割当てるか。false
90log.retention.check.interval.msログが削除対象であるかログクリーナがチェックする間隔。300000[1,…]
91max.connections.per.ip許可するIPアドレスの最大接続数。2147483647[1,…]
92max.connections.per.ip.overridesIpまたはホスト名の接続はデフォルトの接続数を上書きします。“”
93num.partitionsトピックのデフォルトのパーティション。パーティションを未指定で作成した時に適用される値。1[1,…]
94principal.builder.classビルドインインターフェースとしてPrincipalBuilderを実装するときの完全修飾名。class org.apache.kafka.common.security.auth.DefaultPrincipalBuilder
95producer.purgatory.purge.interval.requestsProducerのリクエストのパージ間隔。1000
96replica.fetch.backoff.msパーティションのフェッチに失敗した時にスリープする時間。1000[0,…]
97reserved.broker.max.idbroker.idとして使うことのできるidの数。kafkaのBrokerの最大数という意味。1000[0,…]
98sasl.enabled.mechanismskafkaサーバで有効なSASLのリスト。[GSSAPI]
99sasl.kerberos.kinit.cmdKerberosのkinitのコマンドパス。/usr/bin/kinit
100sasl.kerberos.min.time.before.reloginログインスレッドのスリープタイム。60000
101sasl.kerberos.principal.to.local.rules名前とプリンシパルのマッピングの規則リスト[DEFAULT]
102sasl.kerberos.service.namekafkaで実行されるKerberosプリンシパル名。null
103sasl.kerberos.ticket.renew.jitter更新時に加算するランダムなjitterの割合。0.05
104sasl.kerberos.ticket.renew.window.factorチケットの有効期限で最後にリフレッシュした時、ログインスレッドが指定した係数の時間スリープになる。double0.8
105sasl.mechanism.inter.broker.protocolブローカーの内部通信に使用するSASL機構。デフォルトはGSSAPI.GSSAPI
106security.inter.broker.protocolブローカー間で使うセキュリティプロトコル。PLAINTEXT
107ssl.cipher.suites暗号スイートのリスト。null
108ssl.client.authクライアント認証を要求するためにKafkaブローカーを設定します。

重要度lowの設定

よくわからないマニアックな設定達。

NoNameDescriptionDefault設定例
125authorizer.class.name承認のために使用されるべきであるauthorizerクラス“”
126metric.reportersメトリックレポータのクラスリスト。[]
127metrics.num.samplesメトリックを計算するためのサンプル数。2[1,…]
128metrics.sample.window.msサンプルのメトリックを取る時間???30000[1,…]
129quota.window.numメモリ内に保持するサンプル数。11[1,…]
130quota.window.size.secondsサンプルの期間。1[1,…]
131ssl.endpoint.identification.algorithmendpoint identification algorithmのサーバネーム検証。null
132zookeeper.sync.time.msHow far a ZK follower can be behind a ZK leader.(意味がわからない。)2000

設定例

また今度。

まとめ

kafkaのBrokerの設定が少しイメージできるレベルになれた。ProducerとConsumerの設定もあるがこれはまた別の機会に。

おわり。

参考

  1. http://kafka.apache.org/documentation.html#brokerconfigs