柚子快報(bào)激活碼778899分享:分布式 Kafka基礎(chǔ)
柚子快報(bào)激活碼778899分享:分布式 Kafka基礎(chǔ)
1. 用途
1. 流量削峰
2. 流計(jì)算
2.?Kafka的核心組件
在Kafka中,Producer、Broker和Consumer是三個(gè)關(guān)鍵的角色,它們?cè)谡麄€(gè)消息傳遞過(guò)程中扮演不同的角色和功能:
1. **Producer(生產(chǎn)者)**:
生產(chǎn)者是消息的發(fā)送方,負(fù)責(zé)將消息發(fā)布到Kafka的主題(Topic)中。生產(chǎn)者將消息發(fā)送給Kafka集群中的一個(gè)或多個(gè)Broker,然后由Broker將消息持久化并進(jìn)行分發(fā)。生產(chǎn)者可以根據(jù)業(yè)務(wù)需求配置消息的發(fā)送策略,例如同步發(fā)送、異步發(fā)送等。
2. **Broker(代理服務(wù)器)**:
Broker是Kafka集群中的中間服務(wù)器,負(fù)責(zé)接收、存儲(chǔ)和分發(fā)消息。每個(gè)Broker都有自己的存儲(chǔ)空間,將消息以分區(qū)(Partition)的方式存儲(chǔ)在本地磁盤(pán)上。Broker負(fù)責(zé)管理主題的元數(shù)據(jù)、分區(qū)的分布和復(fù)制,以及處理生產(chǎn)者和消費(fèi)者的請(qǐng)求。多個(gè)Broker組成的集群共同構(gòu)成了一個(gè)高可用、分布式的消息傳遞平臺(tái)。
3. **Consumer(消費(fèi)者)**:
消費(fèi)者是消息的接收方,負(fù)責(zé)從Kafka的主題中訂閱消息并進(jìn)行消費(fèi)。消費(fèi)者從Broker中拉?。≒ull)消息,可以控制消息的消費(fèi)進(jìn)度和速率。消費(fèi)者可以以不同的消費(fèi)者組(Consumer Group)身份訂閱同一個(gè)主題,這樣可以實(shí)現(xiàn)消息的廣播或分組消費(fèi)。
綜合起來(lái),Producer負(fù)責(zé)將消息發(fā)布到Kafka,Broker負(fù)責(zé)存儲(chǔ)和分發(fā)消息,而Consumer負(fù)責(zé)訂閱和消費(fèi)消息。這三個(gè)角色共同構(gòu)成了Kafka的核心組件,使得Kafka能夠?qū)崿F(xiàn)高性能、高可用的消息傳遞和處理。
3. Kafka中Topic的概念
消息類別,Kafka按照topic來(lái)分類消息
Topic是對(duì)消息的分類,屬于Producer(生產(chǎn)者)和Consumer(消費(fèi)者)之間的概念
Producer會(huì)把消息接受到特定的Producer,Broker會(huì)管理和分配這些消息。
Consumer會(huì)從Consumer特定的區(qū)域請(qǐng)求拿到屬于他的topic消息,然后進(jìn)行消費(fèi)。
消費(fèi)完成之后使用offset標(biāo)記
4.?kafka維護(hù)消息狀態(tài)的跟蹤方法
Kafka中的Topic會(huì)被分為若干分區(qū),每個(gè)分區(qū)同一時(shí)間只能被一個(gè)consumer消費(fèi)
consumer消費(fèi)之后會(huì)把消息offset標(biāo)記,通過(guò)位置偏移來(lái)追蹤消費(fèi)狀態(tài)
5.?zookeeper對(duì)于kafka的作用是什么
1. Zookeeper在kafka集群中用于節(jié)點(diǎn)之間的通信
2. Zookeeper用于管理consumer提交的偏移消息
3. Consumer提交offset消息過(guò)程:
1. Consumer用自己特有的偏移量把消費(fèi)后的消息提交給Zookeeper,這個(gè)過(guò)程異步
2. Zookeeper保存偏移后的消息到自己的數(shù)據(jù)結(jié)構(gòu)里面
3. 如果Consumer故障后重啟,可以向Zookeeper查詢上次提交偏移的位置,從而消費(fèi)后續(xù)的消息。
避免了數(shù)據(jù)的重復(fù)或丟失
6.?kafka判斷一個(gè)節(jié)點(diǎn)還活著的有那兩個(gè)條件
1. 節(jié)點(diǎn)和Zookeeper保持鏈接,Zookeeper會(huì)不定時(shí)發(fā)送心跳的探測(cè)
2. 如果follow節(jié)點(diǎn),需要定時(shí)同步master的同步消息
7.?kafka?如何不消費(fèi)重復(fù)數(shù)據(jù)
1. 首先應(yīng)該從消息源確定,Producer收到發(fā)送給Broker的消息都有唯一的Id,保障冪等性。
2. 冪等性保證了即使生產(chǎn)者在發(fā)送消息的過(guò)程中發(fā)生了重試,同一條消息也只會(huì)被成功寫(xiě)入一次。無(wú)論生產(chǎn)者發(fā)送消息多少次,只要消息內(nèi)容相同,只有一次會(huì)被寫(xiě)入。
8.?kafka如何實(shí)現(xiàn)數(shù)據(jù)的高效讀取
1. 對(duì)不同topic進(jìn)行分區(qū),分區(qū)之后可以被多個(gè)Consumer同時(shí)并行獲取處理
2. 每個(gè)分區(qū)都維護(hù)了高效的索引
3. 副本機(jī)制:每個(gè)分區(qū)都可以有自己的多個(gè)副本,副本允許被讀取
4. Consumer讀取消息后offset是異步給Zookeeper保存,可以繼續(xù)執(zhí)行其他消息處理步驟
5. 零拷貝:kafka的數(shù)據(jù)傳輸使用零拷貝技術(shù),避免資源浪費(fèi)
零拷貝和傳統(tǒng)拷貝的區(qū)別:
傳統(tǒng)是內(nèi)核態(tài)和用戶之間的拷貝,而零拷貝直接在設(shè)備和內(nèi)存空間拷貝
在零拷貝技術(shù)中,數(shù)據(jù)傳輸?shù)倪^(guò)程中數(shù)據(jù)不再需要從內(nèi)核緩沖區(qū)拷貝到用戶緩沖區(qū),而是直接在內(nèi)核和設(shè)備之間傳輸,避免了中間的拷貝操作。這種方式可以顯著減少CPU的開(kāi)銷,提高數(shù)據(jù)傳輸?shù)乃俣?,并降低系統(tǒng)負(fù)擔(dān)。
9. Kafka的那些設(shè)計(jì)讓它有如此高的性能
1. 使用分布式消息隊(duì)列
2. 使用零拷貝模式
3. 對(duì)log文件分區(qū),創(chuàng)建索引
10. Kafka怎么確定消息讀取的有序性
1. 每個(gè)分區(qū)的消息讀取是有序的,按照發(fā)送的順序進(jìn)行存儲(chǔ)和讀取
2. Kafka 還提供了順序消費(fèi)者(Sequential Consumer)功能,
通過(guò)確保每個(gè)分區(qū)只有一個(gè)消費(fèi)者來(lái)實(shí)現(xiàn)消息的全局有序性。
3. 可以給分區(qū)鍵加一定的邏輯,控制消息讀取順序
4. Kafka只能是分區(qū)內(nèi)有序,因?yàn)樵O(shè)計(jì)的初衷就是為了高并發(fā)
如果想給不同的分區(qū)設(shè)置讀取順序,可以考慮的點(diǎn)是設(shè)置單一分區(qū)。
或者給消息添加序號(hào)或者時(shí)間戳,消費(fèi)的時(shí)候按照這個(gè)邏輯控制順序。
或者所有有順序要求的放到同一個(gè)分區(qū)里面
11. 常見(jiàn)的操作命令
Kafka 提供了豐富的命令行工具來(lái)執(zhí)行各種操作,從創(chuàng)建主題到監(jiān)控集群狀態(tài)。以下是一些常見(jiàn)的 Kafka 操作及其對(duì)應(yīng)的命令行示例:
1. **創(chuàng)建主題:**
使用 `kafka-topics.sh` 命令創(chuàng)建主題。
```sh
kafka-topics.sh --create --topic my-topic --partitions 3 --replication-factor 2 --bootstrap-server localhost:9092
```
--partitions 3 創(chuàng)建3個(gè)分區(qū)
--replication-factor 2 每個(gè)分區(qū)有2個(gè)副本
2. **查看主題列表:**
使用 `kafka-topics.sh` 命令查看主題列表。
```sh
kafka-topics.sh --list --bootstrap-server localhost:9092
```
3. **發(fā)送消息:**
使用 `kafka-console-producer.sh` 命令發(fā)送消息。
```sh
kafka-console-producer.sh --topic my-topic --broker-list localhost:9092
```
輸入命令后進(jìn)入了輸入框,輸入完點(diǎn)擊Enter完成
4. **消費(fèi)消息:**
使用 `kafka-console-consumer.sh` 命令消費(fèi)消息。
```sh
kafka-console-consumer.sh --topic my-topic --from-beginning --bootstrap-server localhost:9092
```
5. **查看消費(fèi)者組消費(fèi)情況:**
使用 `kafka-consumer-groups.sh` 命令查看消費(fèi)者組的消費(fèi)情況。
```sh
kafka-consumer-groups.sh --group my-group --describe --bootstrap-server localhost:9092
```
6. **查看集群狀態(tài):**
使用 `kafka-topics.sh` 命令查看集群狀態(tài)。
```sh
kafka-topics.sh --describe --bootstrap-server localhost:9092
```
7. **添加分區(qū):**
使用 `kafka-topics.sh` 命令為主題添加分區(qū)。
```sh
kafka-topics.sh --alter --topic my-topic --partitions 5 --bootstrap-server localhost:9092
```
8. **查看主題詳細(xì)信息:**
使用 `kafka-topics.sh` 命令查看特定主題的詳細(xì)信息。
```sh
kafka-topics.sh --describe --topic my-topic --bootstrap-server localhost:9092
```
9. **刪除主題:**
使用 `kafka-topics.sh` 命令刪除主題。
```sh
kafka-topics.sh --delete --topic my-topic --bootstrap-server localhost:9092
```
10. **創(chuàng)建 ACL(訪問(wèn)控制列表):**
使用 `kafka-acls.sh` 命令創(chuàng)建 ACL 權(quán)限規(guī)則。
```sh
kafka-acls.sh --authorizer-properties zookeeper.connect=localhost:2181 --add --allow-principal User:alice --operation Read --topic my-topic
```
這只是一些常見(jiàn)的 Kafka 操作示例,Kafka 提供了更多的命令行工具來(lái)執(zhí)行其他操作,如管理 ACL、監(jiān)控集群、更改配置等。你可以在 Kafka 官方文檔中找到更多詳細(xì)的命令和用法說(shuō)明。
柚子快報(bào)激活碼778899分享:分布式 Kafka基礎(chǔ)
推薦文章
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。
轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。