关于Topic和Partition
Topic
在kafka中,topic是一個存儲消息的邏輯概念,可以認為是一個消息集合。每條消息發送到kafka集群的消息都有一個類別。物理上來說,不同的topic的消息是分開存儲的,
每個topic可以有多個生產者向它發送消息,也可以有多個消費者去消費其中的消息。
Partition
每個topic可以劃分多個分區(每個Topic至少有一個分區),同一topic下的不同分區包含的消息是不同的。每個消息在被添加到分區時,都會被分配一個offset(稱之為偏移量),它是消息在此分區中的唯一編號,kafka通過offset保證消息在分區內的順序,offset的順序不跨分區,即kafka只保證在同一個分區內的消息是有序的。?
下圖中,對于名字為test的topic,做了3個分區,分別是p0、p1、p2.
? 每一條消息發送到broker時,會根據partition的規則選擇存儲到哪一個partition。如果partition規則設置合理,那么所有的消息會均勻的分布在不同的partition中,這樣就有點類似數據庫的分庫分表的概念,把數據做了分片處理。
Topic&Partition的存儲
Partition是以文件的形式存儲在文件系統中,比如創建一個名為firstTopic的topic,其中有3個partition,那么在kafka的數據目錄(/tmp/kafka-log)中就有3個目錄,firstTopic-0~3, 命名規則是<topic_name>-<partition_id>
sh kafka-topics.sh --create --zookeeper 192.168.11.156:2181 --replication-factor 1 --partitions 3 --topic firstTopic?
總結
以上是生活随笔為你收集整理的关于Topic和Partition的全部內容,希望文章能夠幫你解決所遇到的問題。