天天看點

kafka主題和分區的概念

kafka主題和分區的概念

1. 主題topic

主題-topic在kafka中是⼀個邏輯的概念,kafka通過topic将消息進⾏分類。不同的topic會被訂閱該topic的消費者消費。

但是有⼀個問題,如果說這個topic中的消息⾮常⾮常多,多到需要⼏t來存,因為消息是會被儲存到log⽇志⽂件中的。為了解決這個⽂件過⼤的問題,kafka提出了partition分區的概念。

kafka主題和分區的概念

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天。七天到後消息會被删除。