kafka的部署

目錄

一、kafka簡介

1.1、概述

1.2、消息系統介紹

1.3、點對點消息傳遞模式

1.4、發布-訂閱消息傳遞模式

二、kafka術語解釋

2.1、結構概述

2.2、broker

2.3、topic

2.4、producer

2.5、consumer

2.6、consumer group

2.7、leader

2.8、follower

2.9、partition

2.10、offset

2.11、replica

2.12、message

2.13、zookeeper

三、kafka架構

四、kafka的部署

4.1、軟件下載

4.1.1、jdk的安裝

4.1.2、zookeeper安裝

4.1.3、kafka的安裝

4.2、單機模式

4.3、集群部署

4.3.1、針對每一個節點的hosts文件添加節點的ip映射信息

4.3.2、時間同步

4.3.3、zookeeper配置?

4.3.4、創建對應的服務id

4.3.5、zoo.cfg參數解析

4.3.6、集群kafka配置


一、kafka簡介

1.1、概述

kafka是由linkedin公司開發,是一個分布式、分區、多副本、多生產者、多消費者,基于zookeeper的分布式 日志系統(也可以作為MQ系統),常見可以用于web/nginx日志、訪問日志、消息服務等,Linkedin2010年將項目貢獻給了Apache基金會并成為頂級開源項目。
主要應用場景是:日志收集系統和消息詳細。
設計目標如下:
1. 一時間復雜度為O(1)的方式提供消息持久能力,即使對TB級以上的數據也能保證常數時間的訪問性能。
2. 高吞吐率:即使在非常廉價的商用機器上也能做到單機支持每秒100k條消息的傳輸。
3. 支持Kafka Server間的消息分布,以及分布式消費,同時保證每個partition內的消息順序傳輸。
4. 同時支持離線數據和實時數據處理。
5. Scale out:支持在線水平擴展。

1.2、消息系統介紹

一個消息系統負責將數據從一個應用傳遞到另外一個應用,應用只需要關注數據,無需要關系數據再兩個或者 多個應用間是如何傳遞的。分布式消息傳遞基于可靠的消息隊列,在客戶端應用和消息系統之間異步傳遞消 息,有兩種主要的消息傳遞模式:點對點傳遞模式、發布-訂閱模式。大部分的消息系統選用發布-訂閱模式。
kafka無疑也是一種消息訂閱模式的系統。

1.3、點對點消息傳遞模式

在點對點消息系統中,消息持久化到一個隊列中。此時,將有一個或多個消費隊列中的數據。但是一條消息只 能被消費一次,當一個消費者消費了隊列中的某條數據之后,該條數據則從消息隊列中刪除。該模式及時有多 個消費者同時消費數據,也能保證數據處理的順序,架構示意圖如下

1.4、發布-訂閱消息傳遞模式

在該模式中,消息唄持久化到一個topic中。與點對點消息系統不同的是,消費者可以訂閱一個或者多個 topic,消費者可以消費topic中所有的數據,同一條數據可以被多個消費者消費,數據被消費后不會立馬刪除。在該模式下,消息的生產者稱為發布者,消費者稱為訂閱這,架構示意圖如下:

二、kafka術語解釋

2.1、結構概述

上圖中一個topic配置了3partitionPartition1有兩個o?set01Partition24o?setPartition31個o?set。副本的id和副本所在的機器的id恰好相同。
如果一個topic的副本數為3,那么Kafka將在集群中為每個partition創建3個相同的副本。集群中的每個broker存儲一個或多個partition。多個producerconsumer可同時生產和消費數據。

2.2、broker

一臺Kafka服務器就是一個Broker,一個集群由多個Broker組成,一個Broker可以容納多個TopicBroker和Broker之間沒有MasterStandy的概念,他們之間的地位基本是平等的。
Kafka集群包含一個或者多個服務器,服務器節點成為broker
broker存儲topic的數據,如果某topicNpartion,集群有Nbroker
broker存儲topic的數據。如果某topicNpartition,集群有Nbroker,那么每個broker存儲該topic的一個partition
如果某topicNpartition,集群有(N+M)broker,那么其中有Nbroker存儲該topic的一個partition,剩下的Mbroker不存儲該topicpartition數據。
如果某topicNpartition,集群中broker數目少于N個,那么一個broker存儲該topic的一個或多個 partition。在實際生產環境中,盡量避免這種情況的發生,這種情況容易導致Kafka集群數據不均衡。

2.3、topic

每條發布到Kafka集群的消息都有一個類別,這個類別被稱為Topic。(物理上不同Topic的消息分開存儲,邏輯上一個Topic的消息雖然保存于一個或多個broker上但用戶只需指定消息的Topic即可生產或消費數據而不必關心數據存于何處)
類似于數據庫的表名。

2.4、producer

topic中的數據分割為一個或多個partition。每個topic至少有一個partition。每個partition中的數據使用多個 segment文件存儲。partition中的數據是有序的,不同partition間的數據丟失了數據的順序。如果topic有多個partition,消費數據時就不能保證數據的順序。在需要嚴格保證消息的消費順序的場景下,需要將partition數目設為1

2.5、consumer

消費者可以從broker中讀取數據。消費者可以消費多個topic中的數據。

2.6、consumer group

每個Consumer屬于一個特定的Consumer Group(可為每個Consumer指定group name,若不指定groupname則屬于默認的group)。

2.7、leader

每個partition有多個副本,其中有且僅有一個作為LeaderLeader是當前負責數據的讀寫的partition

2.8、follower

Follower跟隨Leader,所有寫請求都通過Leader路由,數據變更會廣播給所有FollowerFollowerLeader保持數據同步。如果Leader失效,則從Follower中選舉出一個新的Leader。當FollowerLeader掛掉、卡住或者同步太慢,leader會把這個follower“in sync replicas”ISR)列表中刪除,重新創建一個Follower

2.9、partition

為了實現可擴展性,一個非常大的Topic可以被分為多個Partion,從而分布到多臺Broker上。Partion中的每條消息都會被分配一個自增Id(O?set)Kafka只保證按一個Partion中的順序將消息發送給消費者,但是不保證單個Topic中的多個Partion之間的順序。

2.10、offset

消息在TopicPartion中的位置,同一個Partion中的消息隨著消息的寫入,其對應的O?set也自增,結構圖如下:

2.11、replica

副本。TopicPartion含有Nreplica,N為副本因子。其中一個ReplicaLeader,其他都為Follower,Leader處理Partition的所有讀寫請求,與此同時,Follower會定期去同步Leader上的數據。

2.12、message

通訊的基本單位,消息

2.13、zookeeper

存放Kafka集群相關元數據的組件。在ZK集群中會保存Topic的狀態消息,例如分區的個數,分區的組成,分區的分布情況等;保存Broker的狀態消息;報錯消費者的消息等。通過這些消息,Kafka很好的將消息生產,消息存儲,消息消費的過程結合起來。

三、kafka架構

Kafka集群中生產者將消息發送給以Topic命名的消息隊列Queue中,消費者訂閱發往以某個Topic命名的消息隊列Queue中的消息。其中Kafka集群由若干個Broker組成,Topic由若干個Partition組成,每個Partition里面的消息通過O?set來獲取。
一個典型的Kafka集群中包含若干個Producer(可以是某個模塊下發的Command,或者是Web前端產生的 PageView,或者是服務器日志,系統CPU,Memor),若干個BrokerKafka集群支持水平擴展,一般Broker數量越多,整個Kafka集群的吞吐率也就越高),若干個ConsumerGroup, 以及一個Zookeeper集群。Kafka通過zookeeper管理集群配置。Producer使用Push模式將消息發不到Broker上,consumer使用Pull模式從Broker上訂閱并消費消息。

四、kafka的部署

4.1、軟件下載

無論單機部署還是集群,這一步都不能省

4.1.1、jdk的安裝

由于帶GUI界面的安裝,是自帶jdk版本的,我們可以選擇使用默認jdk
自帶JDK,這種JDK可以使用java -version檢查,如果使用javac就不行了,所以進行安裝sudo yum install java-1.8.0-openjdk-devel -y

4.1.2、zookeeper安裝

Apache ZooKeeper

選擇3.5.7版本

上傳服務器,安裝

解壓
tar -zxvf apache-zookeeper-3.5.7-bin.tar.gz
mv apache-zookeeper-3.5.7-bin zookeeper3.5.7
mv zookeeper3.5.7/ /opt創建軟鏈接
ln -s /opt/zookeeper3.5.7/ /opt/zookeeper配置環境變量
vim /etc/profile添加
export ZK_HOME=/opt/zookeeper
export PATH=$PATH:$ZK_HOME/binsource /etc/profile將Zookeeper提供的配置文件復制一份,復制成Zookeeper默認尋找的文件
cd /opt/zookeeper/conf
ls
cp zoo_sample.cfg zoo.cfg
cd ..創建數據存放目錄
mkdir data
chmod 755 /opt/zookeeper/data修改數據存放位置
cd conf/
vim zoo.cfg##修改以下配置
dataDir=/opt/zookeeper/data啟動 Zookeeper,Zookeeper的bin目錄下
cd ..
./bin/zkServer.sh start zoo.cfg

檢測zookeeper是否正常

jps # 看到控制臺成功輸出 QuorumPeerMain,表示啟動成功./bin/zkServer.sh status zoo.cfg ## Mode: standalone表示ok

4.1.3、kafka的安裝

?https://kafka.apache.org/downloads

選擇?kafka_2.12-3.8.0.tgz?進行下載,Scala 2.12 和 Scala 2.13 主要是使用Scala編譯的版本不同,兩者皆可

上傳服務器,安裝

解壓
tar -zxvf kafka_2.12-2.7.0.tgz
mv kafka_2.12-2.7.0 /opt
cd /opt創建軟鏈接
ln -s /opt/kafka_2.12-2.7.0/ /opt/kafka
ls配置環境變量
vim /etc/profile添加
export KAFKA_HOME=/opt/kafka
export PATH=:$PATH:${KAFKA_HOME}source /etc/profile

4.2、單機模式

在Kafka的config目錄下存在相關的配置信息——本次我們只想讓Kafka快速啟動起來只關注server.properties文件即可cd ${KAFKA_HOME}/config
ls
#connect-console-sink.properties    connect-file-source.properties   consumer.properties  server.properties
#connect-console-source.properties  connect-log4j.properties         kraft                tools-log4j.properties
#connect-distributed.properties     connect-mirror-maker.properties  log4j.properties     trogdor.conf
#connect-file-sink.properties       connect-standalone.properties    producer.properties  zookeeper.properties打開配置文件,并主要注意以下幾個配置
vim server.propertiesbroker.id=0 #kafka服務節點的唯一標識,這里是單機不用修改
#     listeners = PLAINTEXT://host1:9092  別忘了設置成自己的主機名
listeners=PLAINTEXT://host1:9092 #kafka底層監聽的服務地址,注意是使用主機名,不是ip。
# log.dirs 指定的目錄 kafka啟動時可以自動創建,因此不要忘了讓kafka可以有讀寫這個目錄的權限。
log.dirs=/opt/kafka/data ##kafka的分區以日志的形式存儲在集群中(其實就是broker數據存儲的目錄)log.retention.hours=168 #日志的留存策略,默認168小時也就是一周
# zookeeper 的連接地址 ,別忘了設置成自己的主機名,單機情況下可以使用 localhost
zookeeper.connect=host1:2181

啟動kafka

./bin/kafka-server-start.sh -daemon config/server.properties #后臺啟動kafka使用 jps 查看是否成功啟動kafka
jps
34843 QuorumPeerMain
21756 Jps
116076 Kafka

4.3、集群部署

4.3.1、針對每一個節點的hosts文件添加節點的ip映射信息

vim  /etc/hosts
192.168.157.80 host1
192.168.157.81 host2
192.168.157.82 host3

4.3.2、時間同步

yum install ntp -y
ntpdate cn.pool.ntp.org | ntp[1-7].aliyun.com #兩個時鐘同步地址選擇一個就行

4.3.3、zookeeper配置?

vim /opt/zookeeper/conf/zoo.cfg
##額外添加以下配置
server.1=host1:2888:3888 #數據同步端口:領導選舉時服務器監聽的端口
server.2=host2:2888:3888
server.3=host3:2888:3888

4.3.4、創建對應的服務id

# host1
echo 1 > /opt/zookeeper/data/myid #在這個文件中寫入自己服務的id號
# host2
echo 2 > /opt/zookeeper/data/myid
# host3
echo 3 > /opt/zookeeper/data/myid

4.3.5、zoo.cfg參數解析

tickTime=2000: 通信心跳數,用于設置Zookeeper服務器與客戶端之間的心跳時間間隔,單位是毫秒。這個時間間隔是Zookeeper使用的基本時間單位,用于服務器之間或客戶端與服務器之間維持心跳的時間間隔。initLimit=10: LF初始通信時限,用于設置集群中的Follower跟隨者服務器與Leader領導者服務器之間啟動時能容忍的最多心跳數。如果在這個時限內(10個心跳時間)領導和根隨者沒有發出心跳通信,就視為失效的連接,領導和根隨者徹底斷開。syncLimit=5: LF同步通信時限,用于設置集群啟動后,Leader與Follower之間的最大響應時間單位。假如響應超過這個時間(syncLimit * tick Time -> 10秒),Leader就認為Follower已經死掉,會將Follower從服務器列表中刪除。dataDir: 數據文件目錄+數據持久化路徑,主要用于保存Zookeeper中的數據。dataLogDir: 日志文件目錄,用于存儲Zookeeper的日志文件。clientPort=2181: 客戶端連接端口,用于監聽客戶端連接的端口

4.3.6、集群kafka配置

?server.properties配置文件

cd ${KAFKA_HOME}/config
vim server.propertiesbroker.id=0 #kafka服務節點的唯一標識
#     listeners = PLAINTEXT://your.host.name:9092  別忘了設置成自己的主機名
listeners=PLAINTEXT://host1:9092 #集群中需要設置成每個節點自己的
# log.dirs 指定的目錄 kafka啟動時可以自動創建,因此不要忘了讓kafka可以有讀寫這個目錄的權限。
log.dirs=/opt/kafka/data ##kafka的分區以日志的形式存儲在集群中(其實就是broker數據存儲的目錄)
# The minimum age of a log file to be eligible for deletion due to age
log.retention.hours=168 #日志的留存策略,默認168小時也就是一周
# zookeeper 集群的連接地址 
zookeeper.connect=host1:2181,host2:2181,host3:2181

其余配置:

##修改差異配置
cd ${KAFKA_HOME}/config
vim server.properties# host2節點
broker.id=1
listeners=PLAINTEXT://host2:9092
# host3節點
broker.id=2
listeners=PLAINTEXT://host3:9092

?kafka集群即可正常啟動

kafka其余命令./bin/kafka-server-stop.sh #關閉kafka
kafka-console-consumer.sh #消費命令
kafka-console-producer.sh #生產命令
kafka-consumer-groups.sh #查看消費者組,重置消費位點等
kafka-topics.sh #查詢topic狀態,新建,刪除,擴容
kafka-acls.sh #配置,查看kafka集群鑒權信息
kafka-configs.sh #查看,修改kafka配置
kafka-mirror-maker.sh #kafka集群間同步命令
kafka-preferred-replica-election.sh #重新選舉topic分區leader
kafka-producer-perf-test.sh #kafka自帶生產性能測試命令
kafka-reassign-partitions.sh #kafka數據重平衡命令
kafka-run-class.sh #kafka執行腳本

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/89711.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/89711.shtml
英文地址,請注明出處:http://en.pswp.cn/web/89711.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

小語種OCR識別技術實現原理

小語種OCR(光學字符識別)技術的實現原理涉及計算機視覺、自然語言處理(NLP)和深度學習等多個領域的融合,其核心目標是讓計算機能夠準確識別并理解不同語言的印刷或手寫文本。以下是其關鍵技術實現原理的詳細解析&#…

GPT:讓機器擁有“創造力”的語言引擎

當ChatGPT寫出莎士比亞風格的十四行詩,當GitHub Copilot自動生成編程代碼,背后都源于同一項革命性技術——**GPT(Generative Pre-trained Transformer)**。今天,我們將揭開這項“語言魔術”背后的科學原理!…

LeetCode|Day19|14. 最長公共前綴|Python刷題筆記

LeetCode|Day19|14. 最長公共前綴|Python刷題筆記 🗓? 本文屬于【LeetCode 簡單題百日計劃】系列 👉 點擊查看系列總目錄 >> 📌 題目簡介 題號:14. 最長公共前綴 難度:簡單…

安全事件響應分析--基礎命令

----萬能密碼oror1 or # 1or11 1 or 11安全事件響應分析------***windoes***------方法開機啟動有無異常文件 【開始】?【運行】?【msconfig】文件排查 各個盤下的temp(tmp)相關目錄下查看有無異常文件 :Windows產生的 臨時文件 可以通過查看日志且通過篩…

基于C#+SQL Server實現(Web)學生選課管理系統

學生選課管理系統的設計與開發一、項目背景學生選課管理系統是一個學校不可缺少的部分,傳統的人工管理檔案的方式存在著很多的缺點,如:效率低、保密性差等,所以開發一套綜合教務系統管理軟件很有必要,它應該具有傳統的…

垃圾回收(GC)

內存管理策略,在業務進程運行的過程中,由垃圾收集器以類似守護協程的方式在后臺運行,按照指定策略回收不再被使用的對象,釋放內存空間進行回收 優勢: 屏蔽內存回收的細節:屏蔽復雜的內存管理工作&#xff0…

Datawhale AI夏令營-機器學習

比賽簡介 「用戶新增預測挑戰賽」是由科大訊飛主辦的一項數據科學競賽,旨在通過機器學習方法預測用戶是否為新增用戶 比賽屬于二分類任務,評價指標采用F1分數,分數越高表示模型性能越好。 如果你有一份帶標簽的表格型數據,只要…

Spring IOC容器在Web環境中是如何啟動的(源碼級剖析)?

文章目錄一、Web 環境中的 Spring MVC 框架二、Web 應用部署描述配置傳統配置(web.xml):Java配置類(Servlet 3.0):三、核心啟動流程詳解1. 啟動流程圖2. ★容器初始化入口:ContextLoaderListene…

18個優質Qt開源項目匯總

1,Clementine Music Player Clementine Music Player 是一個功能完善、跨平臺的開源音樂播放器,非常適合用于學習如何開發媒體類應用,尤其是跨平臺桌面應用。它基于 Qt 框架開發,支持多種操作系統,包括 Windows、macO…

計算機視覺:AI 的 “眼睛” 如何看懂世界?

1. 什么是計算機視覺:讓機器 “看見” 并 “理解” 的技術1.1 計算機視覺的核心目標計算機視覺(CV)是人工智能的一個重要分支,它讓計算機能夠 “看懂” 圖像和視頻 —— 不僅能捕捉像素信息,還能分析內容、提取語義&am…

華為OD刷題記錄

華為OD刷題記錄 刷過的題 入門 1、進制 2、NC61 doing 訂閱專欄

QT學習教程(二十五)

雙緩沖技術&#xff08;Double Buffering&#xff09;&#xff08; 2、公有函數實現&#xff09;#include <QtGui> #include <cmath> using namespace std; #include "plotter.h"以上代碼為文件的開頭&#xff0c;在這里把std 的名空間加入到當前的全…

設計模式筆記_結構型_裝飾器模式

1.裝飾器模式介紹裝飾器模式是一種結構型設計模式&#xff0c;允許你動態地給對象添加行為&#xff0c;而無需修改其代碼。它的核心思想是將對象放入一個“包裝器”中&#xff0c;這個包裝器提供了額外的功能&#xff0c;同時保持原有對象的接口不變。想象一下&#xff0c;你有…

day25 力扣90.子集II 力扣46.全排列 力扣47.全排列 II

子集II給你一個整數數組 nums &#xff0c;找出并返回所有該數組中不同的遞增子序列&#xff0c;遞增子序列中 至少有兩個元素 。你可以按 任意順序 返回答案。數組中可能含有重復元素&#xff0c;如出現兩個整數相等&#xff0c;也可以視作遞增序列的一種特殊情況。示例 1&…

Solidity 中的`bytes`

在 Solidity 中&#xff0c;bytes 和 bytes32 都是用來保存二進制數據的類型&#xff0c;但它們的長度、使用場景、Gas 成本完全不同。? 一句話區分類型一句話總結bytes32定長 32 字節&#xff0c;適合做哈希、地址、標識符等固定長度數據。bytes動態長度字節數組&#xff0c;…

初學者STM32—PWM驅動電機與舵機

一、簡介 上一節課主要學習了輸出比較和PWM的基本原理和結構&#xff0c;本節課就主要以實踐為主通過STM32最小系統板和驅動器控制舵機和直流電機。 上一節課的坐標 初學者STM32—輸出比較與PWM-CSDN博客 二、舵機 舵機是一種根據輸入PWM信號占空比來控制輸出角度的裝置 輸…

C++中的異常處理機制:try-catch

一、基本概念 異常&#xff08;Exception&#xff09;&#xff1a;程序執行過程中發生的非正常情況&#xff0c;比如除以零、訪問越界、內存不足等。 異常處理&#xff08;Exception Handling&#xff09;&#xff1a;對異常情況進行捕獲、分析&#xff0c;并采取補救措施&…

如何從 Windows 11 或 10 遠程訪問 Ubuntu 24.04 或 22.04 桌面

了解如何使用 RDP(遠程桌面協議)從 Windows 11 或 10 遠程連接 Ubuntu 24.04 Noble 或 22.04 LTS Jammy JellyFish 桌面的步驟。 Windows 提供了一個便捷的功能,稱為遠程桌面連接,它使用 RDP 協議來遠程連接 PC。當從 Windows 系統建立遠程桌面連接時,使用起來非常簡單,…

Linux 服務器中,Tab 鍵自動補全功能失效

在 Linux 服務器中&#xff0c;Tab 鍵自動補全功能失效通常與 bash-completion 組件缺失或配置異常有關。以下是解決問題的兩個關鍵 YUM 指令及操作步驟&#xff1a;1. 安裝 bash-completion 組件 sudo yum install -y bash-completion說明&#xff1a; bash-completion 是提供…

SpringBoot服裝推薦系統實戰

Spring Boot 服裝推薦系統實例 以下是基于Spring Boot實現的服裝推薦系統的30個實例代碼示例,涵蓋核心功能和實現方法。 用戶注冊與登錄功能 @RestController @RequestMapping("/api/auth") public class AuthController {@Autowiredprivate UserService userSer…