Kafka入門系列—4. Topic的分區

深入分區

  • Topic至少有一個分區、可以有多個分區。通過創建時的參數--partitions來指定分區數。

  • 消息被添加到分區中時,會有一個偏移量offset來唯一標識一條消息。因此同一個分區內的消息是順序的,不同分區中的消息順序無法保證。

  • 下圖中展示了該topic有3個分區,每條消息在被添加到分區中時都有唯一的offset

topic的分區

  • topic分區中的消息存儲在日誌文件中,而且有過期時間,在server.properties文件中配置,默認保存7天。

      log.retention.hours=168
    
  • 分區的設計可以提高kafka的消息吞吐量TPS

    1. 容易水平擴展,只需增加新的broker,建立新的分區,就可以接收同一個topic的消息
    2. 同一個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保證連續,但分區之間的消息順序無法保證。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章