深入分區
-
Topic至少有一個分區、可以有多個分區。通過創建時的參數
--partitions
來指定分區數。 -
消息被添加到分區中時,會有一個偏移量
offset
來唯一標識一條消息。因此同一個分區內的消息是順序的,不同分區中的消息順序無法保證。 -
下圖中展示了該topic有3個分區,每條消息在被添加到分區中時都有唯一的
offset
topic的分區
-
topic分區中的消息存儲在日誌文件中,而且有過期時間,在
server.properties
文件中配置,默認保存7天。log.retention.hours=168
-
分區的設計可以提高kafka的消息吞吐量TPS:
- 容易水平擴展,只需增加新的broker,建立新的分區,就可以接收同一個topic的消息
- 同一個topic的信息會發送到該topic的不同分區,並行處理消息。
分區實例
-
首先依次啓動zookeeper和kafka,並使用下面的命令創建一個有3個分區的topic。
bin/kafka-topics.sh --zookeeper localhost:2181 --create --topic topic5 --replication-factor 1 --partitions 3
-
啓動一個producer,併發送一系列消息
producer連續發送消息
consumer接收到的消息
可以看到,consumer接收到的消息是不連續的,這正是分區導致的:
producer向3個分區寫入消息,consumer從3個分區拉取消息。分區內的消息通過offset
保證連續,但分區之間的消息順序無法保證。