自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Kafka:Kafka架構(gòu)以及應(yīng)用場景

開發(fā) 架構(gòu)
集群中一個(gè)分區(qū)屬于一個(gè)broker,該broker稱為分區(qū)首領(lǐng)。 一個(gè)分區(qū)可以分配給多個(gè)broker,此時(shí)會(huì)發(fā)生分區(qū)復(fù)制。 分區(qū)的復(fù)制提供了消息冗余,高可用。副本分區(qū)不負(fù)責(zé)處理消息的讀寫。

一、Kafka介紹

Kafka是最初由Linkedin公司開發(fā),是一個(gè)分布式、分區(qū)的、多副本的、多生產(chǎn)者、多訂閱者,基于 zookeeper協(xié)調(diào)的分布式日志系統(tǒng)(也可以當(dāng)做MQ系統(tǒng)),常見可以用于web/nginx日志、訪問日志, 消息服務(wù)等等,Linkedin于2010年貢獻(xiàn)給了Apache基金會(huì)并成為頂級(jí)開源項(xiàng)目。

主要應(yīng)用場景是:日志收集系統(tǒng)和消息系統(tǒng)。

Kafka主要設(shè)計(jì)目標(biāo)如下:

  • 以時(shí)間復(fù)雜度為O(1)的方式提供消息持久化能力,即使對(duì)TB級(jí)以上數(shù)據(jù)也能保證常數(shù)時(shí)間的訪 問性能。
  • 高吞吐率。即使在非常廉價(jià)的商用機(jī)器上也能做到單機(jī)支持每秒100K條消息的傳輸。
  •  支持Kafka Server間的消息分區(qū),及分布式消費(fèi),同時(shí)保證每個(gè)partition內(nèi)的消息順序傳輸。
  • 同時(shí)支持離線數(shù)據(jù)處理和實(shí)時(shí)數(shù)據(jù)處理。
  • 支持在線水平擴(kuò)展。

有兩種主要的消息傳遞模式:點(diǎn)對(duì)點(diǎn)傳遞模式、發(fā)布-訂閱模式。大部分的消息系統(tǒng)選用發(fā)布-訂閱 模式。

Kafka就是一種發(fā)布-訂閱模式。 對(duì)于消息中間件,消息分推拉兩種模式。Kafka只有消息的拉取,沒有推送,可以通過輪詢實(shí)現(xiàn)消息的推送。

1. Kafka在一個(gè)或多個(gè)可以跨越多個(gè)數(shù)據(jù)中心的服務(wù)器上作為集群運(yùn)行。

2. Kafka集群中按照主題分類管理,一個(gè)主題可以有多個(gè)分區(qū),一個(gè)分區(qū)可以有多個(gè)副本分區(qū)。

3. 每個(gè)記錄由一個(gè)鍵,一個(gè)值和一個(gè)時(shí)間戳組成。

Kafka具有四個(gè)核心API:

1. Producer API:允許應(yīng)用程序?qū)⒂涗浟靼l(fā)布到一個(gè)或多個(gè)Kafka主題。

2. Consumer API:允許應(yīng)用程序訂閱一個(gè)或多個(gè)主題并處理為其生成的記錄流。

3. Streams API:允許應(yīng)用程序充當(dāng)流處理器,使用一個(gè)或多個(gè)主題的輸入流,并生成一個(gè)或多個(gè)輸出主題的輸出流,從而有效地將輸入流轉(zhuǎn)換為輸出流。

4. Connector API:允許構(gòu)建和運(yùn)行將Kafka主題連接到現(xiàn)有應(yīng)用程序或數(shù)據(jù)系統(tǒng)的可重用生產(chǎn)者 或使用者。例如,關(guān)系數(shù)據(jù)庫的連接器可能會(huì)捕獲對(duì)表的所有更改。

二、Kafka優(yōu)勢

1. 高吞吐量:單機(jī)每秒處理幾十上百萬的消息量。即使存儲(chǔ)了許多TB的消息,它也保持穩(wěn)定的性 能。

2. 高性能:單節(jié)點(diǎn)支持上千個(gè)客戶端,并保證零停機(jī)和零數(shù)據(jù)丟失。

3. 持久化數(shù)據(jù)存儲(chǔ):將消息持久化到磁盤。通過將數(shù)據(jù)持久化到硬盤以及replication防止數(shù)據(jù)丟 失。 1. 零拷貝 2. 順序讀,順序?qū)?3. 利用Linux的頁緩存

4. 分布式系統(tǒng),易于向外擴(kuò)展。所有的Producer、Broker和Consumer都會(huì)有多個(gè),均為分布式 的。無需停機(jī)即可擴(kuò)展機(jī)器。多個(gè)Producer、Consumer可能是不同的應(yīng)用。

5. 可靠性 - Kafka是分布式,分區(qū),復(fù)制和容錯(cuò)的。

6. 客戶端狀態(tài)維護(hù):消息被處理的狀態(tài)是在Consumer端維護(hù),而不是由server端維護(hù)。當(dāng)失敗 時(shí)能自動(dòng)平衡。

7. 支持online和offline的場景。

8. 支持多種客戶端語言。Kafka支持Java、.NET、PHP、Python等多種語言。

三、Kafka應(yīng)用場景

  • 日志收集:一個(gè)公司可以用Kafka可以收集各種服務(wù)的Log,通過Kafka以統(tǒng)一接口服務(wù)的方式開放 給各種Consumer;
  • 消息系統(tǒng):解耦生產(chǎn)者和消費(fèi)者、緩存消息等;
  • 用戶活動(dòng)跟蹤:Kafka經(jīng)常被用來記錄Web用戶或者App用戶的各種活動(dòng),如瀏覽網(wǎng)頁、搜索、點(diǎn)擊 等活動(dòng),這些活動(dòng)信息被各個(gè)服務(wù)器發(fā)布到Kafka的Topic中,然后消費(fèi)者通過訂閱這些Topic來做實(shí)時(shí)的 監(jiān)控分析,亦可保存到數(shù)據(jù)庫;
  • 運(yùn)營指標(biāo):Kafka也經(jīng)常用來記錄運(yùn)營監(jiān)控?cái)?shù)據(jù)。包括收集各種分布式應(yīng)用的數(shù)據(jù),生產(chǎn)各種操作的 集中反饋,比如報(bào)警和報(bào)告;
  •  流式處理:比如Spark Streaming和Storm。

四、Kafka基礎(chǔ)架構(gòu)

消息和批次

Kafka的數(shù)據(jù)單元稱為消息??梢园严⒖闯墒菙?shù)據(jù)庫里的一個(gè)“數(shù)據(jù)行”或一條“記錄”。消息由字節(jié) 數(shù)組組成。 消息有鍵,鍵也是一個(gè)字節(jié)數(shù)組。當(dāng)消息以一種可控的方式寫入不同的分區(qū)時(shí),會(huì)用到鍵。 為了提高效率,消息被分批寫入Kafka。批次就是一組消息,這些消息屬于同一個(gè)主題和分區(qū)。 把消息分成批次可以減少網(wǎng)絡(luò)開銷。批次越大,單位時(shí)間內(nèi)處理的消息就越多,單個(gè)消息的傳輸時(shí) 間就越長。批次數(shù)據(jù)會(huì)被壓縮,這樣可以提升數(shù)據(jù)的傳輸和存儲(chǔ)能力,但是需要更多的計(jì)算處理。

模式

消息模式(schema)有許多可用的選項(xiàng),以便于理解。如JSON和XML,但是它們?nèi)狈?qiáng)類型處理 能力。Kafka的許多開發(fā)者喜歡使用Apache Avro。Avro提供了一種緊湊的序列化格式,模式和消息體分 開。當(dāng)模式發(fā)生變化時(shí),不需要重新生成代碼,它還支持強(qiáng)類型和模式進(jìn)化,其版本既向前兼容,也向 后兼容。 數(shù)據(jù)格式的一致性對(duì)Kafka很重要,因?yàn)樗讼⒆x寫操作之間的耦合性。

主題和分區(qū)

Kafka的消息通過主題進(jìn)行分類。主題可比是數(shù)據(jù)庫的表或者文件系統(tǒng)里的文件夾。主題可以被分為 若干分區(qū),一個(gè)主題通過分區(qū)分布于Kafka集群中,提供了橫向擴(kuò)展的能力。

生產(chǎn)者和消費(fèi)者

生產(chǎn)者創(chuàng)建消息。消費(fèi)者消費(fèi)消息。 一個(gè)消息被發(fā)布到一個(gè)特定的主題上。 生產(chǎn)者在默認(rèn)情況下把消息均衡地分布到主題的所有分區(qū)上:

1. 直接指定消息的分區(qū)

2. 根據(jù)消息的key散列取模得出分區(qū)

3. 輪詢指定分區(qū)。

消費(fèi)者通過偏移量來區(qū)分已經(jīng)讀過的消息,從而消費(fèi)消息。 消費(fèi)者是消費(fèi)組的一部分。消費(fèi)組保證每個(gè)分區(qū)只能被一個(gè)消費(fèi)者使用,避免重復(fù)消費(fèi)。

broker和集群

一個(gè)獨(dú)立的Kafka服務(wù)器稱為broker。broker接收來自生產(chǎn)者的消息,為消息設(shè)置偏移量,并提交 消息到磁盤保存。broker為消費(fèi)者提供服務(wù),對(duì)讀取分區(qū)的請求做出響應(yīng),返回已經(jīng)提交到磁盤上的消 息。單個(gè)broker可以輕松處理數(shù)千個(gè)分區(qū)以及每秒百萬級(jí)的消息量。

每個(gè)集群都有一個(gè)broker是集群控制器(自動(dòng)從集群的活躍成員中選舉出來)。 控制器負(fù)責(zé)管理工作:

  • 將分區(qū)分配給broker
  •  監(jiān)控broker

集群中一個(gè)分區(qū)屬于一個(gè)broker,該broker稱為分區(qū)首領(lǐng)。 一個(gè)分區(qū)可以分配給多個(gè)broker,此時(shí)會(huì)發(fā)生分區(qū)復(fù)制。 分區(qū)的復(fù)制提供了消息冗余,高可用。副本分區(qū)不負(fù)責(zé)處理消息的讀寫。

責(zé)任編輯:武曉燕 來源: 今日頭條
相關(guān)推薦

2019-10-08 10:01:22

Kafka應(yīng)用場景架構(gòu)

2023-11-29 07:43:30

2024-05-11 12:47:16

Kafka場景.高性能

2023-11-28 08:20:25

2018-08-15 09:48:27

數(shù)據(jù)庫Redis應(yīng)用場景

2023-10-24 17:14:52

Kafka分布式系統(tǒng)

2021-08-06 10:43:56

Kubernetes容器

2024-12-19 09:45:24

2022-10-12 07:24:18

大文件哈希算法Hash

2024-08-23 16:04:45

2020-04-07 14:20:10

RabbitMMySQL數(shù)據(jù)庫

2011-05-17 15:24:18

Shibboleth認(rèn)證

2017-03-16 20:00:17

Kafka設(shè)計(jì)原理達(dá)觀產(chǎn)品

2024-08-30 17:14:34

2024-05-28 08:31:46

2012-10-23 09:32:07

2022-10-28 07:15:26

策略模式使用場景UML

2024-03-12 10:36:06

函數(shù)指針代碼

2010-08-31 19:45:26

DHCP server

2021-12-24 10:24:10

零信任
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)