Confluent/KRaft:修订间差异
(→外部連結) |
(→Broker) |
||
(未显示同一用户的39个中间版本) | |||
第1行: | 第1行: | ||
'''Confluent/KRaft'''是[[Apache Kafka]]在2.8之後推出的版本,目的是為了取代[[Apache ZooKeeper]]的功能。 | '''Confluent/KRaft'''是[[Apache Kafka]]在2.8之後推出 的功能,由[[Confluent]]包裝 的版本,目的是為了取代[[Apache ZooKeeper]]的功能。 | ||
== 安裝 == | |||
{{Main|Confluent}} | |||
軟體的安裝在controller或是broker都一樣(比較簡單,沒跑起來的軟體只是佔個磁碟空間),參考[[Confluent]]條目的說明即可。 | |||
== 設定 == | |||
=== Controller === | |||
這邊是三controller機的設定。 | |||
先把<code>/etc/kafka/kraft/controller.properties</code>複製到<code>/etc/kafka/server.properties</code>下,然後把以下的設定值改成對應的值: | |||
<syntaxhighlight lang="ini"> | |||
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 | |||
</syntaxhighlight> | |||
其中需要特別講解的是: | |||
* <code>node.id</code>每台機器都不同。 | |||
* <code>controller.quorum.voters</code>的<code>n@hostname:19092</code>格式中,<code>n</code>就是<code>node.id</code>,而hostname為可以連到的位置(可以是IP),另外因為目前官方沒有比較好的TCP port選擇,社群蠻多人都是設定19092。 | |||
* <code>CONTROLLER</code>是從其他會動的設定檔裡面抄來的。這個部分是沿襲[[Apache Kafka]]文件的傳統,你看完一堆文件後不知道他到底是什麼意思,文件自身也互相矛盾。 | |||
接著先產生後續<code>kafka-storage</code>需要用的值,首先是要產生出一組叫做「UUID」的字串(22 chars,對應到Base62或是Base64的entropy都夠128bits,但格式不是常見的UUID字串表示法)。這邊要注意,產生一次就可以,三台用的值都會是同一個: | |||
<syntaxhighlight lang="bash"> | |||
kafka-storage random-uuid | |||
</syntaxhighlight> | |||
接著先建立<code>/opt/kraft-controller-logs</code>與對應的權限: | |||
<syntaxhighlight lang="bash"> | |||
sudo mkdir /opt/kraft-controller-logs | |||
sudo chown cp-kafka:confluent /opt/kraft-controller-logs | |||
</syntaxhighlight> | |||
再來透過<code>kafka-storage</code>把<code>/opt/kraft-controller-logs</code>這個目錄初始化,這邊會用<code>sudo -u cp-kafka</code>要確保目錄權限正確: | |||
<syntaxhighlight lang="bash"> | |||
sudo -u cp-kafka kafka-storage format --config=/etc/kafka/server.properties --cluster-id=xxxxxxxxxxxxxxxxxxxxxx | |||
</syntaxhighlight> | |||
設定完成後可以啟動,然後看一下狀態與log檔案,目前的版本會看到每0.5秒打一次snapshot的訊息<ref>{{Cite web |url=https://github.com/confluentinc/cp-all-in-one/issues/120 |title=KRaft - Kafka nodes continuously generating metadata deltas from snapshots #120 |language=en |accessdate=2023-05-31}}</ref>: | |||
<syntaxhighlight lang="bash"> | |||
sudo service confluent-kafka start | |||
sudo service confluent-kafka status | |||
sudo tail -F /var/log/kafka/server.log | |||
</syntaxhighlight> | |||
另外從TCP連線也可以看到連線的情況(通常只會剩下一個連到leader的連線): | |||
<syntaxhighlight lang="bash"> | |||
netstat -an | grep 19092 | |||
</syntaxhighlight> | |||
都沒問題後可以設定開機跑起來: | |||
<syntaxhighlight lang="bash"> | |||
sudo systemctl enable confluent-kafka | |||
</syntaxhighlight> | |||
另外這些log檔案預設不會被清除,所以要修改<code>/etc/kafka/log4j.properties</code>,把<code>server.log</code>的部分換成<ref name="logrotation">{{Cite web |url=https://sleeplessbeastie.eu/2021/12/10/how-to-rotate-kafka-logs/ |title=How to rotate Kafka logs |language=en |accessdate=2023-08-18 |date=2021-12-10}}</ref>: | |||
<syntaxhighlight lang="ini"> | |||
log4j.appender.kafkaAppender=org.apache.log4j.RollingFileAppender | |||
log4j.appender.kafkaAppender.File=${kafka.logs.dir}/server.log | |||
log4j.appender.kafkaAppender.layout=org.apache.log4j.PatternLayout | |||
log4j.appender.kafkaAppender.layout.ConversionPattern=[%d] %p %m (%c)%n | |||
log4j.appender.kafkaAppender.MaxFileSize=128MB | |||
log4j.appender.kafkaAppender.MaxBackupIndex=10 | |||
</syntaxhighlight> | |||
=== Broker === | |||
這邊是三broker機的設定。 | |||
先把<code>/etc/kafka/kraft/broker.properties</code>複製到<code>/etc/kafka/server.properties</code>下,然後把以下的設定值改成對應的值: | |||
<syntaxhighlight lang="ini"> | |||
process.roles=broker | |||
node.id=4 | |||
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=PLAINTEXT://kafka-broker-1.example.com:9092 | |||
advertised.listeners=PLAINTEXT://kafka-broker-1.example.com:9092 | |||
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-broker-logs | |||
default.replication.factor=3 | |||
</syntaxhighlight> | |||
其中需要特別講解的是: | |||
* <code>node.id</code>每台機器都不同,如果controller已經吃掉<code>1</code>、<code>2</code>、<code>3</code>,這邊就要設定<code>4</code>、<code>5</code>、<code>6</code>。 | |||
* <code>controller.quorum.voters</code>會從controller那邊的設定複製過來。 | |||
* <code>default.replication.factor</code>預設值建議設定成<code>3</code>。 | |||
接著先建立<code>/opt/kraft-controller-logs</code>與對應的權限: | |||
<syntaxhighlight lang="bash"> | |||
sudo mkdir /opt/kraft-broker-logs | |||
sudo chown cp-kafka:confluent /opt/kraft-broker-logs | |||
</syntaxhighlight> | |||
再來透過<code>kafka-storage</code>把<code>/opt/kraft-broker-logs</code>這個目錄初始化,這邊會用<code>sudo -u cp-kafka</code>要確保目錄權限正確,另外<code>cluster-id</code>就是跟上面controller時設定的一樣: | |||
<syntaxhighlight lang="bash"> | |||
sudo -u cp-kafka kafka-storage format --config=/etc/kafka/server.properties --cluster-id=xxxxxxxxxxxxxxxxxxxxxx | |||
</syntaxhighlight> | |||
設定完成後可以啟動,然後看一下狀態與log檔案: | |||
<syntaxhighlight lang="bash"> | |||
sudo service confluent-kafka start | |||
sudo service confluent-kafka status | |||
sudo tail -F /var/log/kafka/server.log | |||
</syntaxhighlight> | |||
另外從TCP連線也可以看到連線的情況(通常會看到連到leader的19092與自己在聽的9092): | |||
<syntaxhighlight lang="bash"> | |||
netstat -an | grep 9092 | |||
</syntaxhighlight> | |||
都沒問題後可以設定開機跑起來: | |||
<syntaxhighlight lang="bash"> | |||
sudo systemctl enable confluent-kafka | |||
</syntaxhighlight> | |||
接著可以建立broker的load balancer,提供給Kafka的用戶端連線使用。 | |||
另外這些log檔案預設不會被清除,所以要修改<code>/etc/kafka/log4j.properties</code>,把<code>server.log</code>的部分換成<ref name="logrotation"/>: | |||
<syntaxhighlight lang="ini"> | |||
log4j.appender.kafkaAppender=org.apache.log4j.RollingFileAppender | |||
log4j.appender.kafkaAppender.File=${kafka.logs.dir}/server.log | |||
log4j.appender.kafkaAppender.layout=org.apache.log4j.PatternLayout | |||
log4j.appender.kafkaAppender.layout.ConversionPattern=[%d] %p %m (%c)%n | |||
log4j.appender.kafkaAppender.MaxFileSize=128MB | |||
log4j.appender.kafkaAppender.MaxBackupIndex=10 | |||
</syntaxhighlight> | |||
== 相關條目 == | == 相關條目 == | ||
第6行: | 第157行: | ||
* [[Apache ZooKeeper]] | * [[Apache ZooKeeper]] | ||
* [[Confluent]] | * [[Confluent]] | ||
== 參考資料 == | |||
{{Reflist|2}} | |||
== 外部連結 == | == 外部連結 == | ||
第11行: | 第166行: | ||
* [https://cwiki.apache.org/confluence/display/KAFKA/KIP-500%3A+Replace+ZooKeeper+with+a+Self-Managed+Metadata+Quorum KIP-500: Replace ZooKeeper with a Self-Managed Metadata Quorum] {{en}} | * [https://cwiki.apache.org/confluence/display/KAFKA/KIP-500%3A+Replace+ZooKeeper+with+a+Self-Managed+Metadata+Quorum KIP-500: Replace ZooKeeper with a Self-Managed Metadata Quorum] {{en}} | ||
* [https://docs.confluent.io/platform/current/kafka-metadata/kraft.html KRaft Overview] {{en}} | * [https://docs.confluent.io/platform/current/kafka-metadata/kraft.html KRaft Overview] {{en}} | ||
* [https://developer.confluent.io/learn/kraft/ KRaft: Apache Kafka Without ZooKeeper] {{en}} | |||
[[Category:軟體]] | [[Category:軟體]] |
2023年10月3日 (二) 06:52的最新版本
Confluent/KRaft是Apache Kafka在2.8之后推出的功能,由Confluent包装的版本,目的是为了取代Apache ZooKeeper的功能。
安装
软件的安装在controller或是broker都一样(比较简单,没跑起来的软件只是占个磁盘空间),参考Confluent条目的说明即可。
设定
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
接着先建立/opt/kraft-controller-logs
与对应的权限:
sudo mkdir /opt/kraft-controller-logs
sudo chown cp-kafka:confluent /opt/kraft-controller-logs
再来透过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
另外这些log档案预设不会被清除,所以要修改/etc/kafka/log4j.properties
,把server.log
的部分换成[2]:
log4j.appender.kafkaAppender=org.apache.log4j.RollingFileAppender
log4j.appender.kafkaAppender.File=${kafka.logs.dir}/server.log
log4j.appender.kafkaAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.kafkaAppender.layout.ConversionPattern=[%d] %p %m (%c)%n
log4j.appender.kafkaAppender.MaxFileSize=128MB
log4j.appender.kafkaAppender.MaxBackupIndex=10
Broker
这边是三broker机的设定。
先把/etc/kafka/kraft/broker.properties
复制到/etc/kafka/server.properties
下,然后把以下的设定值改成对应的值:
process.roles=broker
node.id=4
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=PLAINTEXT://kafka-broker-1.example.com:9092
advertised.listeners=PLAINTEXT://kafka-broker-1.example.com:9092
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-broker-logs
default.replication.factor=3
其中需要特别讲解的是:
node.id
每台机器都不同,如果controller已经吃掉1
、2
、3
,这边就要设定4
、5
、6
。controller.quorum.voters
会从controller那边的设定复制过来。default.replication.factor
预设值建议设定成3
。
接着先建立/opt/kraft-controller-logs
与对应的权限:
sudo mkdir /opt/kraft-broker-logs
sudo chown cp-kafka:confluent /opt/kraft-broker-logs
再来透过kafka-storage
把/opt/kraft-broker-logs
这个目录初始化,这边会用sudo -u cp-kafka
要确保目录权限正确,另外cluster-id
就是跟上面controller时设定的一样:
sudo -u cp-kafka kafka-storage format --config=/etc/kafka/server.properties --cluster-id=xxxxxxxxxxxxxxxxxxxxxx
设定完成后可以启动,然后看一下状态与log档案:
sudo service confluent-kafka start
sudo service confluent-kafka status
sudo tail -F /var/log/kafka/server.log
另外从TCP连线也可以看到连线的情况(通常会看到连到leader的19092与自己在听的9092):
netstat -an | grep 9092
都没问题后可以设定开机跑起来:
sudo systemctl enable confluent-kafka
接着可以建立broker的load balancer,提供给Kafka的用户端连线使用。
另外这些log档案预设不会被清除,所以要修改/etc/kafka/log4j.properties
,把server.log
的部分换成[2]:
log4j.appender.kafkaAppender=org.apache.log4j.RollingFileAppender
log4j.appender.kafkaAppender.File=${kafka.logs.dir}/server.log
log4j.appender.kafkaAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.kafkaAppender.layout.ConversionPattern=[%d] %p %m (%c)%n
log4j.appender.kafkaAppender.MaxFileSize=128MB
log4j.appender.kafkaAppender.MaxBackupIndex=10
相关条目
参考资料
- ↑ KRaft - Kafka nodes continuously generating metadata deltas from snapshots #120. [2023-05-31] (English).
- ↑ 2.0 2.1 How to rotate Kafka logs. 2021-12-10 [2023-08-18] (English).