View on GitHub

Today I Learned

Software Engineering Blog

Kafka

Producer

Producer recordにはTopic, Partition, Key, Valueが含まれる。

Producerからsendされると、Serializer -> Partitionerの後、topic partitionに書き込まれる。

Configuration

必須設定

Configuration Description
bootstrap.servers consumer group ID
key.serializer レコードのキーをシリアライズするために使うクラスの名前
value.serializer レコードの値をシリアライズするために使うクラスの名前

信頼性のための設定

Configuration Description
acks 0はleaderにproduceしたら, 1はleaderに書き込まれてackが返ってきたら, allはleaderと全てのfollowerに書き込まれたらackを返す
retries 一時的なエラーで送信が失敗したレコードを再送信する回数

Serializer, Partitioner

Consumer

Offset commit

オフセットをコミットする前にリバランスが実行されると重複が発生する。

コミットの自動/手動は enable.auto.commit で設定することができる。

信頼性のための設定

Configuration Description
consumer.id consumer group ID
auto.offset.reset 存在しないオフセットを指定した場合に先頭から読むか、最新から読むか
enable.auto.offset 自動でオフセットをコミットさせるか、コード内で手動でコミットするか
auto.commit.interval.ms 自動オフセットコミットのときのインターバル

Broker

Controller

コントローラはパーティションリーダーの選出をする役割を持つ。

クラスタ内で最初に起動するBrokerがZooKeeperの/controllerにノードを作ってリーダーになる。 これでクラスタにコントローラが1つだけ存在する事を保証する。

コントローラになってるBrokerがdownすると、クラスタ内の他のBrokerに通知され、それぞれがZooKeeperにcontrollerノードを作ろうとする。 最初にノードを作成したBrokerが新たにコントローラとなる.

コントローラはBrokerのクラスタ追加削除を検知すると新しいリーダーを選出して既存のBrokerに通知する。 新しいリーダーはレプリカリストの次のレプリカがリーダーとして選ばれる。 通知を受けたBrokerのレプリカは、リーダーからメッセージを複製し始める。

Replication

Brokerのレプリケーション設定

Configuration Description
replication.factor レプリケーション数。3以上推奨
unclean.leader.election.enable in-syncでないレプリカがリーダーになることを許容するかどうか
min.insync.replicas 書き込みに必要なin-syncレプリカの最小数

Compaction

保存期間よりも古いメッセージを削除するdeleteポリシーと、トピックの各キーの最新の値のみを格納するcompactポリシーがある。

Active controller count

コントローラの数が1でない場合は問題あり

MirrorMaker

Kafka Connect

外部データストアとの接続がコネクタの設定だけで書ける。データストアのコネクタが存在しない場合は、Connect APIを使ってアプリケーションを書く。

Confluentが提供しているコネクタ一覧

https://www.confluent.io/product/connectors-repository/