kafka docのbrokerconfigsにある設定をまとめてみた。
なお、対象バージョンは0.10.0です。また、正確に理解出来ていない箇所があるので正確な情報が欲しい場合はkafka公式かkafkaのソースコードを見てください。
設定の重要度がhigh, medium, lowの3つに分けてあるのでhighを手厚く調べる。設定項目が全部で130個くらいあるので重要度毎に表を分割してます。
あと、数個DEPRECATEDの設定があったが、他に対応する項目が用意されているので項目から除外している。
重要度highの設定
重要らしいのでサラッと見て必要な設定はしたほうがいいと思われる設定。ついでに、どんな機能があるのかが設定項目からイメージできるはず。
No | Name | Description | Default | 設定例 | |
---|---|---|---|---|---|
1 | zookeeper.connect | Brokerが接続するZKホストのリストをカンマ区切りで指定する。 | - | hostnameOrIp:port | |
2 | advertised.listeners | クライアントが使うためにZKに公開するリスナー。 | null | hostnameOrIp:port | |
3 | auto.create.topics.enable | 自動トピック作成を有効にする。 | true | ||
4 | auto.leader.rebalance.enable | 自動リーダーバランシングを有効にする。定期的に必要に応じてバックグラウンドスレッドがリーダーのバランシングをチェック・トリガします。Topicのパーティションごとにリーダーが割り当てられるのでこのリーダーのバランシングを自動的に動かすかどうかが設定できるようです。 | true | ||
5 | background.threads | 種々のバックグラウンド処理タスクに割当てるスレッド数。 | 10 | ||
6 | broker.id | Brokerを一意に識別するための数値。 | -1 | 100 | |
7 | compression.type | Topicの最終的なデータ圧縮方式。gzip/snappy/lz4の標準的なものが使える。圧縮しない、オプションを指定することでProducerが圧縮した方式を保持することが出来る。Broker側で圧縮するのかProducer側で圧縮してから送るのかは要件次第だが、Kafkaが必要になるケースではProducer側から膨大なデータが送信されるようなことが想定できるのでProducer側で圧縮したほうがネットワークの負荷を下げられる気がする。デフォルト値はproducerと記述があるのでProducer側で圧縮している模様。 | producer | none or gzip or snappy or lz4 | |
8 | delete.topic.enable | トピック削除を有効にするか。 | false | ||
9 | leader.imbalance.check.interval.seconds | コントローラによってトリガされるパーティションのリバランスチェックの頻度。秒で間隔を指定する。 | 300 | ||
10 | leader.imbalance.per.broker.percentage | ブローカー毎に不均等なリーダー割り当てを許す割合。指定された値を上回ったときにコントローラがリバランスをトリガする。値はパーセンテージで指定する。 | 10 | ||
11 | listeners | リスナーのリスト。リッスンするURIとプロトコルのリストをカンマ区切りで指定する。全てのI/Fにバインドする場合は0.0.0.0の様に指定し、デフォルトのI/Fを指定する場合は空のホスト名を指定する。 | null | PLAINTEXT://myhost:9092,TRACE://:9091 | |
12 | log.dir | ログを保存するディレクトリ。log.dirsの補助。 | /tmp/kafka-logs | ||
13 | log.dirs | ログを保存するディレクトリ。値が設定されてない場合はlog.dirを使う。 | null | ||
14 | log.flush.interval.messages | メッセージをディスクにフラッシュする前にログパーティションに蓄積できるメッセージ数。ログパーティションに保存するメッセージ数を制限する必要がある場合に設定する感じか。 | 9223372036854775807 | [1,…] | |
15 | log.flush.interval.ms | ディスクにフラッシュする前にトピックでメッセージを保持する最大時間(ms)設定されていない場合はlog.flush.scheduler.interval.msを使う。 | null | ||
16 | log.flush.offset.checkpoint.interval.ms | ログのリカバリポイントとして機能する最後のフラッシュの記録の永続化を更新する頻度。デフォルトでは60秒間隔でログのリカバリポイントがディスクにフラッシュされる。0を指定した時はどうなるんだろ。 | 60000 | [0,…] | |
17 | log.flush.scheduler.interval.ms | ディスクにフラッシュする必要があるかもしれないログをフラッシャーがチェックする頻度。単位ms。デフォルトの設定だとチェックしない。フラッシュする頻度が細かく設定できるがどの程度パフォーマンスに影響するのかは調べる価値がありそう。 | 9223372036854775807 | ||
18 | log.retention.bytes | ログを削除するしきい値として最大サイズをbyteで指定する。デフォルトでは-1が設定されているので削除しないっぽい。おそらくディスクフルになるのを防ぐ用途で使うっぽい。どう削除されるのかは気になる。古いものから? | -1 | ||
19 | log.retention.hours | ログを保持する時間を指定する。時間をトリガにデータを削除できる。デフォルトでは7日。1ヶ月保持したければ720を指定する。 | 168 | ||
20 | log.retention.minutes | ログを保持する時間を分で指定する。指定されていない場合はlog.retention.hoursが利用される。 | null | ||
21 | log.retention.ms | ログを保持する時間を分で指定する。指定されていない場合はlog.retention.minutesが利用される。 | null | ||
22 | log.roll.hours | 新しいログセグメントがロールアウトされるまでの時間。 | 168 | [1,…] | |
23 | log.roll.ms | 単位がmsになっただけで上と同じ。 | null | ||
24 | log.roll.jitter.hours | ログをロールするまでの揺らぎ幅。指定した時間内でログをロールしますよという意味だと思われる。 | 0 | [0,…] | |
25 | log.roll.jitter.ms | 単位がmsになっただけで上と同じ。 | null | ||
26 | log.segment.bytes | 1つのログファイルの最大サイズ。デフォルトは1GB。 | 1073741824 | [14,…] | |
27 | log.segment.delete.delay.ms | ファイルシステムからファイルを削除するまでに待機する時間。 | 60000 | [0,…] | |
28 | message.max.bytes | サーバが受信できるメッセージの最大サイズ。デフォルトは0.95MB。デフォルトの数字はどこから出てきたんだろうか。 | 1000012 | [0,…] | |
29 | min.insync.replicas | プロデューサーのACK=all(or -1)要求を満たすために必要なISRのレプリカ最小数。 | 1 | [1,…] | |
30 | num.io.threads | サーバがネットワークリクエストを捌くためのIOスレッドの数。 | 8 | [1,…] | |
31 | num.network.threads | サーバがネットワークリクエストをハンドリングするために使うネットワークスレッドの数。 | 3 | [1,…] | |
32 | num.recovery.threads.per.data.dir | ログのリカバリー開始時とシャットダウン時のフラッシングに使うデータディレクトリ毎のスレッド数。 | 1 | [1,…] | |
33 | num.replica.fetchers | ソースブローカーからメッセージを複製するために使うフェッチ用スレッドの数。この値を大きくするとフォロワーブローカのI/O並列度を高めることができます。 | 1 | ||
34 | offset.metadata.max.bytes | コミットオフセットに関連付けられているメタデータエントリの最大サイズ。 | 4096 | ||
35 | offsets.commit.required.acks | コミットされる前にacksの要求を許可することが出来ます。一般的にデフォルトの-1を書き換えるべきではありません。Kafkaのフォロワーにメッセージが同期される前にメッセージを取り出すことを許可するという意味だと思われる。危なそう。 | -1 | ||
36 | offsets.commit.timeout.ms | オフセットのコミットは全てのレプリカがオフセットトピックのコミットを受け取るか、タイムアウトになるまで延期されます。これはプロデューサーの要求のタイムアウトに似ています。デフォルトの5秒。つまり、5秒間経過しても全てのレプリカにコミットされなかったらオフセットに対してコミットを行わないので何もなかったことになります。 | 5000 | [1,…] | |
37 | offsets.load.buffer.size | キャッシュにオフセットをロードするときのオフセットセグメントからの読み取りのためのバッチサイズ。単位はバイト。Kafkaの文脈で出てくるBatchという言葉はストレージからキャッシュにデータを移すことを指しているっぽい。 | 5242880 | [1,…] | |
38 | offsets.retention.check.interval.ms | 古くなったオフセットをチェックする頻度。デフォルトでは10分に1回。 | 600000 | [1,…] | |
39 | offsets.retention.minutes | トピックのオフセットの保持ウィンドウを記録する時間を指定する。デフォルトでは1日に1回。正しく理解出来ていない気がしますが、オフセットの保持状況をログに出力する頻度でしょうか。 | 1440 | [1,…] | |
40 | offsets.topic.compression.codec | トピックのオフセットの圧縮コーデックを指定する。圧縮は「アトミック」コミットを果たすために使用されるかもしれません。intで何を指定するのかは不明。 | 0 | ||
41 | offsets.topic.num.partitions | オフセットのコミットトピックのパーティション数。デプロイ後に変更するべきではない。デフォルト50。50もいるのかなと直感的に思った。 | 50 | [1,…] | |
42 | offsets.topic.replication.factor | トピックのオフセットのレプリケーション数。可用性を確保するのであれば高く設定すること。トピックのオフセットが効果的にレプリケーションが確実に行われることは生きているブローカー数はトピックのオフセットに最初のリクエストがあった時にレプリケーションされている値を設定することです。もし、そうでなければトピックのトピックの作成のいずれかが失敗するか、またはそれは生きているブローカーで構成された最小のレプリケーションを取得します | 3 | [1,…] | |
43 | offsets.topic.segment.bytes | キャッシュの読み込みとログの圧縮が早く容易に出来るように、トピックのオフセットは小さく保たれるべきです。要は出来るだけ小さく設定したほうがパフォーマンスが出来ますよということだと思われる。デフォルトは1GB。 | 104857600 | [1,…] | |
44 | queued.max.requests | ネットワークスレッドがブロックされる前に許可されるキューされるリクエストの最大数。 | 500 | [1,…] | |
45 | quota.consumer.default | consumerが毎秒フェッチ出来るデータ量で絞ることができる。 | 9223372036854775807 | [1,…] | |
46 | quota.producer.default | producerから送信されるデータ量を毎秒で絞ることが出来る。 | 9223372036854775807 | [1,…] | |
47 | replica.fetch.max.bytes | フェッチ出来るメッセージの最大バイト数。 | 1048576 | ||
48 | replica.fetch.min.bytes | フェッチレスポンスの最小サイズを指定します。十分なバイト出ない場合、replicaMaxWaitTimeMsまで待ちます。 | 1 | ||
49 | replica.fetch.wait.max.ms | フォロワーのレプリカに発行された各フェッチ要求の最大待ち時間。この値は常に低いスループットのトピックのためのISRで頻繁な収縮を防ぐために、すべての回でreplica.lag.time.max.ms未満でなければなりません。 | 500 | ||
50 | replica.high.watermark.checkpoint.interval.ms | watermarkをディスクに書き出す頻度。 watermarkが何を示すのかよくわからない。 | 5000 | ||
51 | replica.lag.time.max.ms | もし、フェッチリクエストがフォロワーに送信されていない場合またはリーダーが消費していない場合はリーダーはISRからフォロワーを削除します。 | 10000 | ||
52 | replica.socket.receive.buffer.bytes | ネットワークリクエストを受けるソケットのバッファーサイズ。 | 65536 | ||
53 | replica.socket.timeout.ms | ソケットのネットワークリクエストのタイムアウト時間。 | 30000 | ||
54 | request.timeout.ms | クライアントがリクエストの応答を待つ最大時間を制御する設定。応答がタイムアウトする前に受信されない場合は、必要に応じて経過するクライアントが要求を再送信するか、または再試行回数を使いきった場合はリクエストが失敗します。 | 30000 | ||
55 | socket.receive.buffer.bytes | ソケットサーバソケットのSO_RCVBUFバッファ。 | 102400 | ||
56 | socket.request.max.bytes | ソケットリクエストの最大バイト数。 | 104857600 | [1,…] | |
57 | socket.send.buffer.bytes | ソケットサーバソケットのSO_SNDBUFバッファ。 | 102400 | ||
58 | unclean.leader.election.enable | データが失われる可能性がある時、苦肉の策としてISRセットでリーダーとして選出されるべきではないレプリカを有効にするかどうかを示します。 | true | ||
59 | zookeeper.connection.timeout.ms | クライアントがZKに接続を確立するために待機する最大時間。設定しない場合zookeeper.session.timeout.msが使われる。 | null | ||
60 | zookeeper.session.timeout.ms | ZKセッションのタイムアウト時間。 | 6000 | ||
61 | zookeeper.set.acl | クライアントにセキュアなACLを設定する。どんなACLなのかは不明。デフォルトは使用しない設定。 | false |
重要度mediumの設定
以下は重要度mediumの設定なのでさらさらっと流す。
バックグラウンドで動作するスレッドの設定がいくつかあったり、SSLを使うための設定がある。
No | Name | Description | Default | 設定例 | |
---|---|---|---|---|---|
62 | broker.id.generation.enable | サーバーでブローカーのIDの自動生成する。 | true | ||
63 | broker.rack | ブローカーの物理的なラックを指定する。ラックを意識したレプリカの持ち方になる。Examples: ‘RACK1’, ‘us-east-1d’ | null | ||
64 | connections.max.idle.ms | アイドルのコネクションのタイムアウト設定。 | 600000 | ||
65 | controlled.shutdown.enable | サーバシャットダウンのコントロール。 | true | ||
66 | controlled.shutdown.max.retries | サーバ再起動に失敗した場合の再実行回数の指定。 | 3 | ||
67 | controlled.shutdown.retry.backoff.ms | 再試行までの待機時間。 | 5000 | ||
68 | controller.socket.timeout.ms | コントローラ-ブローカーチャンネルのソケットタイムアウト時間。 | 30000 | ||
69 | default.replication.factor | レプリカ数を未指定時に自動的に作成されるトピックのレプリカ数 | 1 | ||
70 | fetch.purgatory.purge.interval.requests | フェッチリクエストのパージするリクエスト回数。 | 1000 | ||
71 | group.max.session.timeout.ms | 登録されたconsumerのための最大許容セッションタイムアウト秒数。 | 300000 | ||
72 | group.min.session.timeout.ms | 登録されたconsumerのための最小許容セッションタイムアウト秒数。 | 6000 | ||
73 | inter.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.1 | 0.10.0-IV1 | ||
74 | log.cleaner.backoff.ms | ログがないときはスリープ状態とする秒数。 | 15000 | [0,…] | |
75 | log.cleaner.dedupe.buffer.size | クリーナースレッドでログの重複排除のために使用されるメモリ量。 | 134217728 | ||
76 | log.cleaner.delete.retention.ms | クリーナーでレコードがどれくらい保持され削除されるか。 | 86400000 | ||
77 | log.cleaner.enable | ログクリーナープロセスを有効にするか。 | true | ||
78 | log.cleaner.io.buffer.load.factor | 設定した負荷(%)を超えた時にクリーナー重複排除のバッファ負荷率を記録する。 | 0.9 | ||
79 | log.cleaner.io.buffer.size | すべてのクリーナースレッドのI/Oがバッファに使用される総メモリ量。 | 524288 | [0,…] | |
80 | log.cleaner.io.max.bytes.per.second | 書き込みI/Oの合計が平均を超えた時に小さくなるように絞られます。 | 1.7976931348623157E308 | ||
81 | log.cleaner.min.cleanable.ratio | クリーニング対象ログの合計に占める汚染ログ最小割合。 | 0.5 | ||
82 | log.cleaner.threads | ログのクリーニングに使われるバッググラウンドスレッドの数。 | 1 | [0,…] | |
83 | log.cleanup.policy | 保持ウィンドーを超えた場合のデフォルトのクリーンアップポリシー設定。 | delete | [compact, delete] | |
84 | log.index.interval.bytes | オフセットインデックスにエントリを追加する間隔。 | 4096 | [0,…] | |
85 | log.index.size.max.bytes | オフセットのインデックスの最大サイズ。 | 10485760 | [4,…] | |
86 | log.message.format.version | ブローカーがログにメッセージを追加するために使用するメッセージフォーマットのバージョンを指定する。 | 0.10.0-IV1 | ||
87 | log.message.timestamp.difference.max.ms | 指定されたタイムスタンプとBrokerが受信した時のタイムスタンプの違いでメッセージを許可することが出来ます。その許容するタイムスタンプの差を設定します。 | 9223372036854775807 | [0,…] | |
88 | log.message.timestamp.type | ログが追加された時間かメッセージが作成された時間か、タイムスタンプの形式を指定します。 | CreateTime | [CreateTime, LogAppendTime] | |
89 | log.preallocate | 新しいセグメントを作成するときに事前にファイルを割当てるか。 | false | ||
90 | log.retention.check.interval.ms | ログが削除対象であるかログクリーナがチェックする間隔。 | 300000 | [1,…] | |
91 | max.connections.per.ip | 許可するIPアドレスの最大接続数。 | 2147483647 | [1,…] | |
92 | max.connections.per.ip.overrides | Ipまたはホスト名の接続はデフォルトの接続数を上書きします。 | “” | ||
93 | num.partitions | トピックのデフォルトのパーティション。パーティションを未指定で作成した時に適用される値。 | 1 | [1,…] | |
94 | principal.builder.class | ビルドインインターフェースとしてPrincipalBuilderを実装するときの完全修飾名。 | class org.apache.kafka.common.security.auth.DefaultPrincipalBuilder | ||
95 | producer.purgatory.purge.interval.requests | Producerのリクエストのパージ間隔。 | 1000 | ||
96 | replica.fetch.backoff.ms | パーティションのフェッチに失敗した時にスリープする時間。 | 1000 | [0,…] | |
97 | reserved.broker.max.id | broker.idとして使うことのできるidの数。kafkaのBrokerの最大数という意味。 | 1000 | [0,…] | |
98 | sasl.enabled.mechanisms | kafkaサーバで有効なSASLのリスト。 | [GSSAPI] | ||
99 | sasl.kerberos.kinit.cmd | Kerberosのkinitのコマンドパス。 | /usr/bin/kinit | ||
100 | sasl.kerberos.min.time.before.relogin | ログインスレッドのスリープタイム。 | 60000 | ||
101 | sasl.kerberos.principal.to.local.rules | 名前とプリンシパルのマッピングの規則リスト | [DEFAULT] | ||
102 | sasl.kerberos.service.name | kafkaで実行されるKerberosプリンシパル名。 | null | ||
103 | sasl.kerberos.ticket.renew.jitter | 更新時に加算するランダムなjitterの割合。 | 0.05 | ||
104 | sasl.kerberos.ticket.renew.window.factor | チケットの有効期限で最後にリフレッシュした時、ログインスレッドが指定した係数の時間スリープになる。 | double | 0.8 | |
105 | sasl.mechanism.inter.broker.protocol | ブローカーの内部通信に使用するSASL機構。デフォルトはGSSAPI. | GSSAPI | ||
106 | security.inter.broker.protocol | ブローカー間で使うセキュリティプロトコル。 | PLAINTEXT | ||
107 | ssl.cipher.suites | 暗号スイートのリスト。 | null | ||
108 | ssl.client.auth | クライアント認証を要求するためにKafkaブローカーを設定します。 |
重要度lowの設定
よくわからないマニアックな設定達。
No | Name | Description | Default | 設定例 |
---|---|---|---|---|
125 | authorizer.class.name | 承認のために使用されるべきであるauthorizerクラス | “” | |
126 | metric.reporters | メトリックレポータのクラスリスト。 | [] | |
127 | metrics.num.samples | メトリックを計算するためのサンプル数。 | 2 | [1,…] |
128 | metrics.sample.window.ms | サンプルのメトリックを取る時間??? | 30000 | [1,…] |
129 | quota.window.num | メモリ内に保持するサンプル数。 | 11 | [1,…] |
130 | quota.window.size.seconds | サンプルの期間。 | 1 | [1,…] |
131 | ssl.endpoint.identification.algorithm | endpoint identification algorithmのサーバネーム検証。 | null | |
132 | zookeeper.sync.time.ms | How far a ZK follower can be behind a ZK leader.(意味がわからない。) | 2000 |
設定例
また今度。
まとめ
kafkaのBrokerの設定が少しイメージできるレベルになれた。ProducerとConsumerの設定もあるがこれはまた別の機会に。
おわり。