Linux 搭建 Kafka 環境 - 詳細教程

目錄

一. Kafka介紹

1. 應用場景

2. 版本對比

二. Kafka安裝

1. 前置環境

(1)安裝JDK

2. 軟件安裝

(3)環境變量配置

(3)服務啟動

三. Console測試

基礎命令

(1)列出Kafka集群中所有存在的主題

(3)創建一個新的主題

(3)刪除主題

(4)描述主題

(5)啟動生產者

(6)啟動消費者

四. 注冊系統服務

1. Systemd服務配置

2. Kafka服務控制


一. Kafka介紹

Kafka是由Apache軟件基金會開發的一個開源流處理平臺,由Scala和Java編寫。該項目的目標是為處理實時數據提供一個統一、高吞吐、低延遲的平臺。其持久化層本質上是一個“按照分布式事務日志架構的大規模發布/訂閱消息隊列”,這使它作為企業級基礎設施來處理流式數據非常有價值。

1. 應用場景

Kafka可以看作是一個能夠處理消息隊列的中間件,適用于實時的流數據處理,主要用于平衡好生產者和消費者之間的關系。

  • 生產者

生產者可以看作是數據源,可以來自于日志采集框架,如Flume,也可以來自于其它的流數據服務。當接收到數據后,將根據預設的Topic暫存在Kafka中等待消費。對于接收到的數據將會有額外的標記,用于記錄數據的被消費【使用】情況。

  • 消費者

消費者即數據的使用端,可以是一個持久化的存儲結構,如Hadoop,也可以直接接入支持流數據計算的各種框架,如Spark - Streaming。消費者可以有多個,通過訂閱不同的Topic來獲取數據。

2. 版本對比

Kafka的0.x和1.x可以看作是上古版本了,最近的更新也是幾年以前,從目前的場景需求來看,也沒有什么特別的理由需要使用到這兩個版本了。

  • 2.x

在進行版本選擇時,通常需要綜合考慮整個數據流所設計到的計算框架和存儲結構,來確定開發成本以及兼容性。目前2.x版本同樣是一個可以用于生產環境的版本,并且保持著對Scala最新版本的編譯更新。

  • 3.x

3.x是目前最新的穩定版,需要注意的是,Kafka的每個大版本之間的差異較大,包括命令參數以及API調用,所以在更換版本前需要做好詳細的調查與準備,本文以3.x的安裝為例。

二. Kafka安裝

解壓安裝的操作方式可以適用于各種主流Linux操作系統,只需要解決好前置環境問題。

1. 前置環境

此前,運行Kafka需要預先安裝Zookeeper。在Kafka 2.8.0版本以后,引入了Kraft(Kafka Raft)模式,可以使Kafka在不依賴外部Zookeeper的前提下運行。除此之外Kafka由Scala語言編寫,需要JVM的運行環境。

(1)安裝JDK

?Ubuntu/Debian:

sudo apt install openjdk-8-jdk

? CentOS/RedHat:

sudo yum install java-1.8.0-openjdk

安裝完成后可以使用java-version命令驗證【可省去環境變量配置】。

2. 軟件安裝

  • 下載Kafka ,鏈接如下:
# 離線下載安裝包
https://downloads.apache.org/kafka/3.5.2/kafka_2.12-3.5.2.tgz# 在線利用wget遠程下載?
wget https://downloads.apache.org/kafka/3.5.2/kafka_2.12-3.5.2.tgz
  • 解壓安裝??
tar -zvxf kafka_2.12-3.5.2.tgz

(3)環境變量配置

需要在環境變量中指定Kafka的安裝目錄以及命令文件所在目錄,系統環境變量與用戶環境變量配置其中之一即可。

/etc/profile 文件最下方添加如下兩行命令--配置全局環境。

export KAFKA_HOME=/home/ygsj/Config_files/kafka_server/kafka_2.12-3.5.2
export PATH=$PATH:$KAFKA_HOME/bin

在文件結尾添加以上內容后執行source命令,使其立即生效。

source /etc/profile[Ubuntu/Debian] source ~/.bashrc[CentOS/RedHat] source ~/.bash_profile

執行后可以輸入kafka,然后按Tab嘗試補全【需要按多次】,如果出現命令列表則證明配置成功。

(3)服務啟動

使用Kraft模式,則需要先進行集群初始化【即使是單個節點】,以下為操作步驟:

  • 目錄下創建 kafka-logs文件夾

  • 修改配置文件

修改Kafka的/config/kraft/server.properties文件,更換其中的log.dirs目錄指向創建目錄,防止默認的/tmp被清空:

log.dirs=/home/ygsj/Config_files/kafka_server/kafka-logs

  • 創建Kafka的集群ID?
KAFKA_CLUSTER_ID="$(bin/kafka-storage.sh random-uuid)"

調用?kafka-storage.sh?生成一個UUID

將獲得的 UUID?放到 kafka_2.12-3.5.2/config/kraft/server.properties 文件中 如下:

相同文件內修改:遠程連接開啟 (紅框內寫服務器ip)---自己測試0.0.0.0無效

進入到Kafka的家目錄后,執行以下命令?

bin/kafka-storage.sh format -t $KAFKA_CLUSTER_ID -c config/kraft/server.properties# bin/kafka-server-start.sh config/kraft/server.properties

?這種方式并不是后臺運行,需要保證終端開啟,等測試穩定后可以在后臺執行或者注冊為系統服務。?

三. Console測試

基礎命令

(1)列出Kafka集群中所有存在的主題

kafka-topics.sh --list --bootstrap-server localhost:9092

--bootstrap-server localhost:9092 指定了Kafka集群的連接地址(在這里是本地的Kafka服務器)
如果集群中沒有主題,命令不會返回任何內容
當你創建主題后,這條命令會返回集群中存在的主題列表

(3)創建一個新的主題

kafka-topics.sh --create --topic my-topic --bootstrap-server localhost:9092

這條命令用于創建一個名為 my-topic 的新主題。
--create 指定了創建操作。
--topic my-topic 指定了要創建的主題名稱。
--bootstrap-server localhost:9092 指定了Kafka集群的連接地址。
Created topic my-topic. 表示主題 my-topic 已成功創建。

(3)刪除主題

kafka-topics.sh --delete ?--topic my-topic --bootstrap-server localhost:9092

--delete: 指定要刪除一個主題。
--topic my-topic: 指定要刪除的主題名稱是 my-topic。
--bootstrap-server localhost:9092: 指定Kafka集群的連接地址(在此是本地的Kafka服務器)。

(4)描述主題

?kafka-topics.sh --describe ?--topic my-topic --bootstrap-server localhost:9092

獲取指定主題 my-topic 的詳細信息。
--describe 指定了描述操作。
--topic my-topic 指定了要描述的主題名稱。
--bootstrap-server localhost:9092 指定了Kafka集群的連接地址。

(5)啟動生產者

kafka-console-producer.sh --bootstrap-server localhost:9092 --topic my-topic

啟動一個基于console的生產者腳本,可以方便的進行數據輸入的測試,直接進行數據輸入即可。

(6)啟動消費者

?kafka-console-consumer.sh --help? 打印所有參數

kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic my-topic --from-beginning

添加from-beginning參數來從頭消費數據。

四. 注冊系統服務

?為了方便的控制Kafka服務的啟動和停止,可以將其注冊為系統服務。

1. Systemd服務配置

創建Systemd服務文件

sudo vim /etc/systemd/system/kafka.service

在文件中添加以下內容,需要手動替換ExecStartExecStop中關于路徑的部分:

[Unit]
Description=Apache Kafka
Requires=network.target remote-fs.target
After=network.target remote-fs.target
[Service]
Type=simple
ExecStart=/home/ygsj/Config_files/kafka_server/kafka_2.12-3.5.2/bin/kafka-server-start.sh /home/ygsj/Config_files/kafka_server/kafka_2.12-3.5.2/config/kraft/server.properties
ExecStop=/home/ygsj/Config_files/kafka_server/kafka_2.12-3.5.2/bin/kafka-server-stop.sh
Restart=on-abnormal
[Install]
WantedBy=multi-user.target

?重新加載Systemd配置?

sudo systemctl daemon-reload

2. Kafka服務控制

  • 開機自動啟動
sudo systemctl enable kafka.service
  • 啟動Kafka服務
sudo systemctl start kafka.service
  • 檢查Kafka狀態?
sudo systemctl status kafka.service

  • 停止Kafka服務
sudo systemctl stop kafka.service
  • 重啟Kafka服務
sudo systemctl restart kafka.service

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

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

相關文章

【c++刷題筆記-貪心】day30:56. 合并區間 、 738.單調遞增的數字

56. 合并區間 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a;覆蓋區間問題&#xff0c;先排序再判斷邊界 重點&#xff1a;二維數組可以使用back&#xff08;&#xff09;函數直接更換邊界值 class Solution { public:static bool cmp(const vector<int>&a…

上網監控軟件有哪些?3款實力出眾的上網監控軟件

為什么需要上網監控軟件&#xff1f; 據說&#xff0c;99%的員工上班都會摸魚&#xff0c;1%的員工上班會竊取公司信息。 所以&#xff0c;因此&#xff0c;監控員工的上網行為是很有必要滴。 總結下來&#xff0c;上網監控軟件的作用是&#xff1a; 1.提高生產力&#xff1…

天線罩作用

天線罩是安裝在天線上的一個保護性結構&#xff0c;基本作用如下&#xff1a; 1.保護天線&#xff1a;天線罩可以保護天線免受外界環境的影響&#xff0c;如雨、雪、風、沙塵等&#xff0c;延長天線的使用壽命。 2.減少損傷&#xff1a;在天線遭受外力撞擊時&#xff0c;天線…

前端位置布局匯總

HTML中脫離文檔流的元素有&#xff1a; position: absolute - 元素相對于最近的已定位&#xff08;非 static&#xff09;祖先元素定位。 position: fixed - 元素相對于瀏覽器窗口定位。 float: left 或 float: right - 元素向左或向右浮動&#xff0c;周圍的內容會環繞它。 …

shark云原生-日志體系-filebeat高級配置(適用于生產)-更新中

文章目錄 1. filebeat.inputs 靜態日志收集器2. filebeat.autodiscover 自動發現2.1. autodiscover 和 inputs2.2. 如何配置生效2.3. Providers 提供者2.4. Providers kubernetes2.5. 配置 templates2.5.1. kubernetes 自動發現事件中的變量字段2.5.2 配置 templates 2.6. 基于…

深度學習全景進階:最新Python深度學習進階與前沿應用

查看原文>>>深度學習全景進階&#xff1a;最新Python深度學習進階與前沿應用 近年來&#xff0c;伴隨著以卷積神經網絡&#xff08;CNN&#xff09;為代表的深度學習的快速發展&#xff0c;人工智能邁入了第三次發展浪潮&#xff0c;AI技術在各個領域中的應用越來越廣…

IDEA發瘋導致maven下載回來的jar不完整zip END header not found

IDEA發瘋導致maven下載回來的jar不完整zip END header not found 具體報錯 java: 讀取D:\mavenRepository\com\alibaba\druid-spring-boot-starter\1.2.23\druid-spring-boot-starter-1.2.23.jar時出錯; zip END header not foundjava: java.lang.RuntimeException: java.io.…

2024 JuniorCryptCTF reppc 部分wp

Random cipher 文本編輯器打開附件 比較簡單。腳本 Mutated Caesar 文本編輯器打開附件 比較簡單。腳本 Pizza 附件拖入dnSpy 比較簡單。腳本 l33t Leet&#xff0c;又稱黑客語&#xff0c;是指一種發源于歐美地區的BBS、線上游戲和黑客社群所使用的文字書寫方式&#xff0c;通…

Linux:進程終止和進程替換

Linux&#xff1a;Linux&#xff1a;進程終止和進程替換 一、進程終止1.1 進程退出場景和創建退出方式 1.2 exit 和 _exit區別二、進程程序替換2.1 進程替換函數2.2 函數解釋及命名解釋函數解釋命名解釋 2.3 單進程程序替換&#xff08;無子進程&#xff09;2.3.1 帶l函數進程替…

ArduPilot開源飛控之AP_VisualOdom

ArduPilot開源飛控之AP_VisualOdom 1. 源由2. 類定義2.1 類與構造函數2.2 枚舉類型2.3 公共方法2.4 消息處理2.5 其他功能2.6 私有成員 3. 框架設計3.1 啟動代碼 AP_VisualOdom::init3.2 消息處理3.2.1 AP_VisualOdom::handle_vision_position_delta_msg3.2.2 AP_VisualOdom::h…

買的Google賬號登錄,修改輔助郵箱收不到驗證碼?可能是個簡單的錯誤

這篇文章分享一個案例&#xff0c;購買了谷歌賬號以后如何修改輔助郵箱&#xff0c;修改輔助郵箱的一些要點&#xff0c;以及常見的一個錯誤。 一、案例回放 這個朋友昨天在我的一個視頻下面留言說買了谷歌賬號以后&#xff0c;想修改輔助郵箱地址&#xff0c;但是輸入了輔助…

中英雙語介紹加拿大多倫多(Toronto)

中文版 多倫多概述 多倫多&#xff08;Toronto&#xff09;是加拿大最大的城市&#xff0c;也是北美地區重要的經濟、文化和金融中心。以下是對多倫多的詳細介紹&#xff0c;包括其經濟地位、金融中心、人口、地理位置、高等教育、移民政策、著名景點和居住的名人等方面的信息…

【Git】本地版本控制

Git 是一個分布式版本控制系統&#xff0c;用于跟蹤文件的更改&#xff0c;通常用于源代碼管理。它的設計目的是為了協同工作和版本管理&#xff0c;讓多個開發人員能夠高效地合作開發和維護代碼。 Git環境配置 在官網可以找到對應下載&#xff1a;Git - Downloads (git-scm.c…

【WebRTC實現點對點視頻通話】

介紹 WebRTC (Web Real-Time Communications) 是一個實時通訊技術&#xff0c;也是實時音視頻技術的標準和框架。簡單來說WebRTC是一個集大成的實時音視頻技術集&#xff0c;包含了各種客戶端api、音視頻編/解碼lib、流媒體傳輸協議、回聲消除、安全傳輸等。對于開發者來說可以…

avcodec_send_packet函數阻塞

用ffmpeg4.1.4開發一個播放器&#xff0c;解碼過程如下&#xff0c;在每個函數前設置標志&#xff0c;測試發現程序阻塞在avcodec_send_packet函數。 while(true){av_read_frameavcodec_send_packetavcodec_receive_frameav_packet_unref } 解釋如下&#xff1a; avcodec_se…

嵌入式Linux:如何學好嵌入式?

目錄 方法步驟 1、 基礎知識 2、 學習linux 3、 學習嵌入式linux 4、深入學習 嵌入式書籍推薦 Linux基礎 Linux內核 研發方向 硬件基礎 方法步驟 1、 基礎知識 目的:能看懂硬件工作原理,但重點在嵌入式軟件,特別是操作系統級軟件。 科目:數字電路、計算機組成原理…

Unity3D游戲 RPG

叢林探險游戲 人物進行探險游戲 擁有登錄&#xff0c;首頁&#xff0c;3D物體旋轉瀏覽的功能&#xff0c;還能進行種植樹等功能

【異常錯誤】‘NoneType‘ object has no attribute ‘GetSubstructMatches‘

出現的錯誤信息&#xff1a; AttributeError: Caught AttributeError in DataLoader worker process 0. Original Traceback (most recent call last): File "/home/mapengsen/anaconda3/envs//lib/python3.8/site-packages/torch/utils/data/_utils/worker.py", l…

【matlab 路徑規劃】基于改進遺傳粒子群算法的藥店配送路徑優化

一 背景介紹 本文分享的是一個基于訂單合并的訂單分配和路徑規劃聯合優化&#xff0c;主要背景是騎手根據客戶需求&#xff0c;從藥店取藥之后進行配送&#xff0c;配送的過程中考慮路徑的長度、客戶的服務時間窗、車輛的固定成本等要素&#xff0c;經過建模和優化得到最優的配…

C# WinForm —— 38 SplitContainer介紹

1. 簡介 將頁面拆分成兩個大小可以調整的區域&#xff0c;中間有一個拆分條&#xff0c;可以拖動拆分條來調整左右區域的大小 2. 屬性 屬性解釋(Name)控件ID&#xff0c;在代碼里引用的時候會用到BoderStyle邊框樣式&#xff1a;None、FixedSingle、Fixed3DAutoScroll當控件…