ZooKeeper基本配置
-
以單機方式(STANDALONE SERVER)啟動zookeeper:
最簡單的ZooKeeper配置
# cat > /usr/local/zookeeper/conf/zoo.cfg << EOF
> tickTime=2000 //刷新時鐘
> dataDir=/var/lib/zookeeper //數(shù)據(jù)存放位置
> clientPort=2181 //客戶端連接端口
> EOF
?啟動命令
# /usr/local/zookeeper/bin/zkServer.sh start
JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
-
以集群方式啟動zookeeper:
tickTime=2000
dataDir=/var/lib/zookeeper
clientPort=2181
initLimit=20
syncLimit=5
server.1=zoo1.example.com:2888:3888
server.2=zoo2.example.com:2888:3888
server.3=zoo3.example.com:2888:3888
服務(wù)器的配置說明:
server.X=hostname:peerPort:leaderPort
X:必須為從1開始的整數(shù)
peerPort: 服務(wù)器之間相互通訊的端口
leaderPort: 主節(jié)點使用的通訊端口
initLimit:允許子節(jié)點與主節(jié)相連的次數(shù)
syncLimit:允許異步子節(jié)點成為主節(jié)點的次數(shù)
tickTime:每次連接的時間
ZooKeeper集群(劇團)建議使用單數(shù)的服務(wù)器,例如,3,5. 如果使用3個服務(wù)器,可以在丟失一個服務(wù)器的情況下繼續(xù)正常工作。如果使用5個服務(wù)器,那么可以在丟失兩個服務(wù)器時正常工作。
如何選擇服務(wù)器的數(shù)量
考慮運行服務(wù)器數(shù)量在5個服務(wù)器為佳。如果需要修改ZooKeeper的配置,那么需要替換停止節(jié)點,修改以后,需要重新加載節(jié)點。如果如果服務(wù)器不能容錯一個以上的節(jié)點down掉,那么維護工作將會有額外的風(fēng)險。同時,也建議不要使用7個以上的節(jié)點,大多數(shù)使用反饋看,7個以上節(jié)點,會面臨這效率降低的問題。
安裝配置Kafka
-
基本配置
#zookeeper 地址,如果多個地址,以逗號隔開
zookeeper.connect=9.51.103.134:2181,9.51.103.135:2181
# Timeout in ms for connecting to zookeeper
zookeeper.connection.timeout.ms=6000
啟動kafka server
./bin/kafka-server-start.sh -daemon ../config/server.properties
為驗證kafka是否啟動成功,創(chuàng)建一個topic,并且生產(chǎn)消費一些消息
-
創(chuàng)建并顯示topic
//創(chuàng)建topic
# ./bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test
Created topic "test".
//顯示topic
# ./bin/kafka-topics.sh --zookeeper localhost:2181 --describe --topic test
Topic:test PartitionCount:1 ReplicationFactor:1 Configs:
Topic: test Partition: 0 Leader: 0 Replicas: 0 Isr: 0
-
產(chǎn)生并消費消息
//產(chǎn)生消息
# ./bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test
Test Message 1
Test Message 2
^C
#
//消費消息
# /bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic test --from-beginning
Test Message 1
Test Message 2
^C
Consumed 2 messages
#
Broker 配置
-
broker.id
默認(rèn)值為0,每個broker的唯一整型識別碼,僅僅用作于broker之間的區(qū)別,建議值包含本身意義,以便與識別,例如ip地址最后一組。 -
port
默認(rèn)9092, 監(jiān)聽端口,如果端口值小于1024,必須以root啟動broker。不建議以root啟動。 -
listeners
PLAINTEXT://your.host.name:9092* -
zookeeper.connect
格式:hostname:port/path,如果需要連接多個,每組以分號隔開。 例如:localhost:2181, 其中path是可選項。 path是制定的kafka根目錄,如果指定了,但是不存在,將在broker啟東時自動創(chuàng)建。
為什么要使用改變根目錄
一般情況下,考慮使用改變根目錄,它可允許Zookeeper 劇團共享應(yīng)用,包括kafka集群。在多個Zookeeper是,這也是最好的方式來指定server。指定后,如果ensemble出現(xiàn)問題,允許broker 連接到其他zookeeper下面的劇團。
-
log.dirs
消息存放地址,多個以逗號分開 -
num.partitions
沒每個topic創(chuàng)建的分區(qū)數(shù)量
如何確定分區(qū)的數(shù)量
考慮分區(qū)數(shù)量,應(yīng)該考慮一下一些因素:
- 期望的吞吐量,比如 每分鐘100KB 或者 1GB 每秒
- 期望單個分區(qū)達到的吞吐量,大多數(shù),單個消費者是從一個分區(qū)讀取數(shù)據(jù),如果知道消費者寫入數(shù)據(jù)庫的數(shù)據(jù)最大為50MB每秒,類似于這種,但給分區(qū)的最大吞吐量為60MB
- 考慮每個生產(chǎn)者的最大吞吐量,一般情況下,生產(chǎn)者的速度總是大于消費者的
- 如果發(fā)送消息是基于Keys的,那么在后期增加分區(qū)是比較麻煩的,所以設(shè)計分區(qū)要考慮以后的使用場景。
- 考慮磁盤和網(wǎng)絡(luò)情況
- 要避免高估,每個分區(qū)使用資源會降低主分區(qū)的性能
-
log.retention.ms
默認(rèn)為log.retention.hours=168, 消息保存的時間,如果多個多個broker配置,那么最小值啟用。 -
log.retention.bytes
消息保存的容量,每個分區(qū)單獨使用容量,單位為字節(jié)。如1GB,一共8個分區(qū),那么總?cè)萘繛?GB