Confluent/KRaft
Confluent/KRaft是Apache Kafka在2.8之后推出的功能,由Confluent包装的版本,目的是为了取代Apache ZooKeeper的功能。
设定
Controller
这边是三controller机的设定。
先把/etc/kafka/kraft/controller.properties
复制到/etc/kafka/server.properties
下,然后把以下的设定值改成对应的值:
process.roles=controller
node.id=1
controller.quorum.voters=1@kafka-controller-1.example.com:19092,2@kafka-controller-2.example.com:19092,3@kafka-controller-3.example.com:19092
listeners=CONTROLLER://kafka-controller-1.example.com:19092
controller.listener.names=CONTROLLER
listener.security.protocol.map=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT,SSL:SSL,SASL_PLAINTEXT:SASL_PLAINTEXT,SASL_SSL:SASL_SSL
log.dirs=/opt/kraft-controller-logs
其中需要特别讲解的是:
node.id
每台机器都不同。controller.quorum.voters
的n@hostname:19092
格式中,n
就是node.id
,而hostname为可以连到的位置(可以是IP),另外因为目前官方没有比较好的TCP port选择,社群蛮多人都是设定19092。CONTROLLER
是从其他会动的设定档里面抄来的。这个部分是沿袭Apache Kafka文件的传统,你看完一堆文件后不知道他到底是什么意思,文件自身也互相矛盾。
接着先产生后续kafka-storage
需要用的值,首先是要产生出一组叫做“UUID”的字串(22 chars,对应到Base62或是Base64的entropy都够128bits,但格式不是常见的UUID字串表示法)。这边要注意,产生一次就可以,三台用的值都会是同一个:
kafka-storage random-uuid
接着透过kafka-storage
把/opt/kraft-controller-logs
这个目录初始化,这边会用sudo -u cp-kafka
要确保目录权限正确:
sudo -u cp-kafka kafka-storage format --config=/etc/kafka/server.properties --cluster-id=xxxxxxxxxxxxxxxxxxxxxx
设定完成后可以启动,然后看一下状态与log档案,目前的版本会看到每0.5秒打一次snapshot的讯息[1]:
sudo service confluent-kafka start
sudo service confluent-kafka status
sudo tail -F /var/log/kafka/server.log
另外从TCP连线也可以看到连线的情况(通常只会剩下一个连到leader的连线):
netstat -an | grep 19092
都没问题后可以设定开机跑起来:
sudo systemctl enable confluent-kafka
Broker
这边是三broker机的设定。
先把/etc/kafka/kraft/broker.properties
复制到/etc/kafka/server.properties
下,然后把以下的设定值改成对应的值:
相关条目
参考资料
- ↑ KRaft - Kafka nodes continuously generating metadata deltas from snapshots #120. [2023-05-31] (English).