kafka主題和分區的概念
1. 主題topic
主題-topic在kafka中是⼀個邏輯的概念,kafka通過topic将消息進⾏分類。不同的topic會被訂閱該topic的消費者消費。
但是有⼀個問題,如果說這個topic中的消息⾮常⾮常多,多到需要⼏t來存,因為消息是會被儲存到log⽇志⽂件中的。為了解決這個⽂件過⼤的問題,kafka提出了partition分區的概念。
2.分區partition
通過partition将⼀個topic中的消息分區來存儲。這樣的好處有多個:
分區存儲,可以解決統-存儲檔案過大的問題。
提供了讀寫的吞吐量:讀和寫可以同時在多個分區中進行。
建立多分區的主題:
./kafka-topics.sh --create --zookeeper 127.0.0.1:9093 --replicationfactor 1 --partitions 2 --topic test2
3.kafka中消息⽇志⽂件中儲存的内容
00000.log: 這個檔案中儲存的就是消息
_consumer_offsets-49:
kafka内部自己建立了_consumer_offsets主題包含了50個分區。這個主題用來存放消費者消費某個主題的偏移量。因為每個消費者都會自己維護着消費的主題的偏移量,也就是說每個消費者會把消費的主題的偏移量自主,上報給kafka中的預設主題:
consumer_ offsets。是以kafka為了提升這個主題的并發性,預設設定了50個分區。
送出到哪個分區:通過hash函數: hash(consumergroupld) %_ consumer_ _offsets主題的分區數
送出到該主題中的内容是: key是consumergroupld+topic+分區号, value就是目前offset的值
檔案中儲存的消息,預設儲存7天。七天到後消息會被删除。