Apache Kafkaについては更新スピードはやいので
基本Docを参照するのがよい
-> Apache Kafka
Apache Kafkaのインストール
Macでインストール
brew install kafka
現時点でインスコされるのはv2.8.0
-
/usr/local/bin/
にkafka関連のコマンドがインスコされる -
/usr/local/etc/kafka/
にコンフィグファイルなどが保存される
設定の変更
ホームディレクトリに適当なディレクトリを作って使うファイルだけコピー
mkdir kafka
mkdir kafka/config
cp /usr/local/etc/kafka/server.properties ./kafka/config
cp /usr/local/etc/kafka/zookeeper.properties ./kafka/config
ログファイルなど保存場所も変更したいので保存先ディレクトリを作成
mkdir kafka/data
mkdir kafka/data/zookeeper
mkdir kafka/data/kafka-logs
./kafka/config/server.properties
の log.dirs
を変更
log.dirs=/Users/yhirai/kafka/data/kafka-logs
./kafka/config/zookeeper.properties
の dataDir
を変更
dataDir=/Users/yhirai/kafka/data/zookeeper
起動
Zookeeperの起動
zookeeper-server-start ./kafka/config/zookeeper.properties
Brokerの起動
kafka-server-start ./kafka/config/server.properties
Topicについて
Topicの作成
kafka-topics --zookeeper 127.0.0.1:2181 --topic first_topic --create --partitions 3 --replication-factor 1
作成したTopicの確認
kafka-topics --zookeeper 127.0.0.1:2181 --topic first_topic --describe
Topicの一覧
kafka-topics --zookeeper 127.0.0.1:2181 --list
Topicの削除
kafka-topics --zookeeper 127.0.0.1:2181 --topic second_topic --delete
削除時はいろいろ問題でてくるみたいなので
このページが参考になるかも
When/how does a topic “marked for deletion” get finally removed?
メモ
送信したメッセージの処理について
プロデューサーでメッセージを送信したとき
そのメッセージはラウンドロビンでパーティションに振り分けられる
そのため、コンシューマー側でメッセージを受信するときには
取得先のパーティションによってメッセージが決まるので
メッセージを送信した順番で処理するとは限らない
送信時につけるKeyについて
Keyをメッセージにつけると
その同じKeyがついているものは同じパーティションに保存されるようになる
acks
データロストしたくない場合
十分なブローカーを用意して
レプリカ(ISR-in sync replica-)にもデータを同期するといい
プロデューサーの設定でacksはallにしておく
Idempotent Producer
Kafka>=0.11のときに使用できる
ネットワークエラーなどでBrokerのackリクエストがプロデューサー側に届かなかった場合に
プロデューサー側から再度リクエストを送ることで重複してメッセージをコミットしなくなる
安全なプロデューサーの設定
Kafka < 0.11 のとき
- acks-all
- min.insync.replicas=2
- retries=MAX_INT
- max.in.flight.requests.per.connection=1
Kafka >= 0.11
- enable.idempotence=true
- min.insync.replicas=2
- aks-all,retries=MAX_INT,max.in.flight.requests.per.connection=5(default)
Message Compression
compression.typeはdefaultがnone
gzip,lz4,snappyなどを選べる
Delivery semantics for consumer
- At most once: メッセージロストの危険性あり
- At least once: メッセージが処理されてからコミットする。ただ、重複してデータを読み取る可能性があるのでメッセージの処理がidempotentであるようにする。
Security
- Encryption
- Authentication
- Authorization
Kafka with the Confluent CLI
Confluent Platform CLI
https://docs.confluent.io/confluent-cli/current/install.html