202534 | KafKa簡介+應用場景+集群搭建+快速入門

Apache Kafka 簡介


一、什么是 Kafka?

Apache Kafka 是一個高吞吐量、分布式、可擴展的流處理平臺,用于構建實時數據管道和流應用程序。它最初由 LinkedIn 開發,并于 2011 年開源,目前由 Apache 軟件基金會進行維護。

Kafka 具備以下核心特性:

  • 發布-訂閱消息系統:支持生產者向主題(Topic)發送消息,消費者從主題中讀取消息。
  • 高吞吐量與低延遲:可處理百萬級每秒消息,延遲低于幾毫秒。
  • 持久化存儲:消息以日志形式存儲在磁盤上,可設定保留時間。
  • 可水平擴展:通過分區(Partition)機制輕松擴展讀寫能力。
  • 高容錯性:副本機制保障在節點故障時依舊能夠正常運行。

Kafka 不僅是一個消息隊列,更是一個用于流數據處理的統一平臺


二、Kafka 的應用場景

Kafka 在大數據和分布式系統領域具有廣泛應用,主要包括:

1. 日志收集與傳輸

Kafka 可統一收集來自不同服務或服務器的日志,作為日志系統的核心組件,將數據傳輸至后端處理系統(如 Hadoop、Elasticsearch 等)。

2. 實時數據分析

結合 Apache Flink、Spark Streaming 等流處理框架,Kafka 可用于構建實時分析平臺,實現實時用戶行為分析、實時監控等。

3. 事件驅動架構(EDA)

Kafka 作為微服務架構中的事件總線,使服務之間通過事件解耦,從而提高系統靈活性與可維護性。

4. 數據管道(Data Pipeline)

Kafka 能將數據從數據庫、日志系統等源系統傳輸到數據倉庫或數據湖,是構建高效可靠數據管道的核心工具。

5. 替代傳統消息隊列

在對吞吐量、可擴展性有更高要求的系統中,Kafka 可替代傳統消息中間件(如 RabbitMQ、ActiveMQ)作為消息傳遞通道。


三、Kafka 的誕生背景

Kafka 的誕生源于 LinkedIn 內部對于日志處理和數據傳輸系統的性能瓶頸

  • LinkedIn 的業務快速增長,系統需要處理海量的用戶行為數據與日志。
  • 傳統的消息隊列系統難以滿足高吞吐量與高可用性的要求。
  • 工程團隊設計了一種新的架構,將“分布式日志”作為核心思想,構建出一個同時支持日志收集、傳輸與處理的統一平臺。

Kafka 在設計上融合了以下理念:

  • 以持久化日志為核心數據結構:每條消息即為一條日志記錄,可重復讀取。
  • 分布式架構支持高可用性與高擴展性:通過集群部署和分區副本機制實現。
  • 支持批處理和流處理雙模式:既可用于數據采集與離線分析,也適合實時流處理。

這一創新架構為 Kafka 后來的廣泛應用打下了堅實基礎,也推動了現代數據架構的演進。

好的!以下是 Kafka Java 快速入門指南,適合初學者快速了解如何在 Java 程序中使用 Kafka 實現消息的生產與消費。


明白了!以下是使用 Mermaid 格式圖形 重新整理的 Kafka 集群搭建指南,清晰展示了 Kafka + ZooKeeper 的集群結構和搭建步驟。


Kafka 集群搭建指南(ZooKeeper 模式)


一、Kafka 集群架構圖(Mermaid 格式)

Kafka集群
ZooKeeper集群
Kafka Broker 1
192.168.1.101:9092
Kafka Broker 2
192.168.1.102:9092
Kafka Broker 3
192.168.1.103:9092
ZooKeeper 節點1
192.168.1.101:2181
ZooKeeper 節點2
192.168.1.102:2181
ZooKeeper 節點3
192.168.1.103:2181
Kafka 客戶端

Topic 分區布局
Leader
Replica
Replica
Leader
Replica
Replica
Leader
Replica
Replica
Partition 0
Leader: Kafka-1
Replica: Kafka-2, Kafka-3
Partition 1
Leader: Kafka-2
Replica: Kafka-1, Kafka-3
Partition 2
Leader: Kafka-3
Replica: Kafka-1, Kafka-2
Kafka Broker 1
192.168.1.101:9092
Kafka Broker 2
192.168.1.102:9092
Kafka Broker 3
192.168.1.103:9092

二、準備工作

1. 系統要求

  • Linux/CentOS/Ubuntu(或容器)
  • Java 8+(推薦 Java 11)
  • 至少 3 臺機器或虛擬節點

2. 下載 Kafka 安裝包(每臺機器)

wget https://downloads.apache.org/kafka/3.6.0/kafka_2.13-3.6.0.tgz
tar -xzf kafka_2.13-3.6.0.tgz
cd kafka_2.13-3.6.0

三、配置 ZooKeeper 集群

1. 修改 config/zookeeper.properties

dataDir=/tmp/zookeeper
clientPort=2181
server.1=192.168.1.101:2888:3888
server.2=192.168.1.102:2888:3888
server.3=192.168.1.103:2888:3888

2. 設置每個節點的 myid

echo 1 > /tmp/zookeeper/myid  # 節點1
echo 2 > /tmp/zookeeper/myid  # 節點2
echo 3 > /tmp/zookeeper/myid  # 節點3

3. 啟動 ZooKeeper(每臺執行)

bin/zookeeper-server-start.sh config/zookeeper.properties

四、配置 Kafka Broker

每臺機器修改 config/server.properties,示例:

broker.id=1                           # 每個節點唯一(如 1、2、3)
listeners=PLAINTEXT://192.168.1.101:9092
log.dirs=/tmp/kafka-logs-1
zookeeper.connect=192.168.1.101:2181,192.168.1.102:2181,192.168.1.103:2181

啟動 Kafka:

bin/kafka-server-start.sh config/server.properties

五、驗證集群

1. 創建主題

bin/kafka-topics.sh --create \
--bootstrap-server 192.168.1.101:9092 \
--replication-factor 3 --partitions 3 \
--topic test-topic

2. 查看主題分布

bin/kafka-topics.sh --describe --topic test-topic --bootstrap-server 192.168.1.101:9092

六、發送與消費消息

生產者:

bin/kafka-console-producer.sh --topic test-topic --bootstrap-server 192.168.1.101:9092

消費者:

bin/kafka-console-consumer.sh --topic test-topic --bootstrap-server 192.168.1.102:9092 --from-beginning

七、常見問題

問題原因
Kafka 啟動失敗broker.id 重復或端口沖突
消息無法消費ZooKeeper 未正常連接,主題未正確創建
節點日志混亂或沖突log.dirs 配置重復,broker.id 沒有區分
ZooKeeper 單點故障節點不足,推薦部署奇數個節點(3/5)

Kafka Java 快速入門指南


一、準備工作

1. 添加 Maven 依賴

在你的項目的 pom.xml 中添加以下依賴:

<dependencies><dependency><groupId>org.apache.kafka</groupId><artifactId>kafka-clients</artifactId><version>3.6.0</version></dependency>
</dependencies>

二、Kafka Producer 示例(生產者)

1. 編寫 KafkaProducerDemo.java

import org.apache.kafka.clients.producer.KafkaProducer;
import org.apache.kafka.clients.producer.ProducerRecord;
import java.util.Properties;public class KafkaProducerDemo {public static void main(String[] args) {// 配置Properties props = new Properties();props.put("bootstrap.servers", "localhost:9092"); // Kafka 地址props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");// 創建生產者KafkaProducer<String, String> producer = new KafkaProducer<>(props);// 發送消息for (int i = 0; i < 5; i++) {String message = "Hello Kafka " + i;producer.send(new ProducerRecord<>("test-topic", message));System.out.println("Sent: " + message);}producer.close();}
}

三、Kafka Consumer 示例(消費者)

1. 編寫 KafkaConsumerDemo.java

import org.apache.kafka.clients.consumer.ConsumerRecords;
import org.apache.kafka.clients.consumer.KafkaConsumer;
import org.apache.kafka.clients.consumer.ConsumerRecord;
import java.time.Duration;
import java.util.Collections;
import java.util.Properties;public class KafkaConsumerDemo {public static void main(String[] args) {// 配置Properties props = new Properties();props.put("bootstrap.servers", "localhost:9092");props.put("group.id", "test-group"); // 消費組props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");props.put("auto.offset.reset", "earliest"); // 從頭開始消費// 創建消費者KafkaConsumer<String, String> consumer = new KafkaConsumer<>(props);// 訂閱主題consumer.subscribe(Collections.singletonList("test-topic"));// 消費消息while (true) {ConsumerRecords<String, String> records = consumer.poll(Duration.ofSeconds(1));for (ConsumerRecord<String, String> record : records) {System.out.printf("Received message: key=%s, value=%s, offset=%d%n",record.key(), record.value(), record.offset());}}}
}

四、運行順序建議

  1. 啟動 Kafka 服務(本地或遠程)
  2. 先運行消費者 KafkaConsumerDemo(等待監聽)
  3. 再運行生產者 KafkaProducerDemo(發送消息)

五、調試小技巧

  • 確保 Kafka 服務正常運行,端口默認為 9092
  • 主題 test-topic 必須提前創建,或在 Kafka 開啟 auto.create.topics.enable=true 的情況下自動創建。
  • 消費者默認是“只消費一次”,再次運行需更改 group.id 或開啟重復讀取邏輯。

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

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

相關文章

Blender 初學者指南 以及模型格式怎么下載

glbxz.com glbxz.com 可以直接下載Blender格式模型 第 1 步&#xff1a;打開 這就是 blender 打開時的樣子。 您面對的是左側和右側的工具欄&#xff0c;頂部是文件作&#xff0c;底部是時間軸&#xff0c;中間是 3D 視圖。 Blender 的默認起始網格是一個立方體&#xff0c…

RV1126 ROS2環境交叉編譯及部署(基于官方Docker)

RV1126 ROS2環境交叉編譯及部署(基于官方Docker) 0 前言1 SDK源碼更新1.1 啟動Docker容器1.2 更新SDK源碼1.3 SDK更新問題2 ROS2編譯配置3 Buildroot rootfs編譯ROS2的依賴包3.1 編譯問題解決4 使用Docker交叉編譯ROS24.1 準備Linux(Ubuntu) PC機的依賴環境4.1.1 Ubuntu PC機…

Go 面向對象,封裝、繼承、多態

Go 面向對象&#xff0c;封裝、繼承、多態 經典OO&#xff08;Object-oriented 面向對象&#xff09;的三大特性是封裝、繼承與多態&#xff0c;這里我們看看Go中是如何對應的。 1. 封裝 封裝就是把數據以及操作數據的方法“打包”到一個抽象數據類型中&#xff0c;這個類型…

無線網絡設備中AP和AC是什么?有什么區別?

無線網絡設備中AP和AC是什么&#xff1f;有什么區別&#xff1f; 一. 什么是AP&#xff1f;二. 什么是AC&#xff1f;三. AP與AC的關系 前言 肝文不易&#xff0c;點個免費的贊和關注&#xff0c;有錯誤的地方請指出&#xff0c;看個人主頁有驚喜。 作者&#xff1a;神的孩子都…

Android SDK

Windows純凈卸載Android SDK 1.關閉所有安卓相關的程序 Android StudioEmulators 如模擬器Command prompts using SDK 如appium服務 2.移除SDK相關目錄 # Delete your SDK directory F:\android_sdk\android-sdk-windows# Also check and remove if present: $env:LOCALAPP…

Android耗電優化全解析:從原理到實踐的深度治理指南

引言 在移動應用性能優化體系中&#xff0c;耗電優化是用戶體驗的核心指標之一。據Google官方統計&#xff0c;超過60%的用戶會因為應用耗電過快而選擇卸載應用。本文將從耗電統計原理、監控手段、治理策略三個維度展開&#xff0c;結合Android系統源碼與實際代碼示例&#xf…

QMK自定義4*4鍵盤固件創建教程:最新架構詳解

QMK自定義4*4鍵盤固件創建教程&#xff1a;最新架構詳解 前言 通過本教程&#xff0c;你將學習如何在QMK框架下創建自己的鍵盤固件。QMK是一個強大的開源鍵盤固件框架&#xff0c;廣泛用于DIY機械鍵盤的制作。本文將詳細介紹最新架構下所需創建的文件及其功能。 準備工作 在…

DAMA第10章深度解析:參考數據與主數據管理的核心要義與實踐指南

引言 在數字化轉型的浪潮中&#xff0c;數據已成為企業的核心資產。然而&#xff0c;數據孤島、冗余和不一致問題嚴重制約了數據價值的釋放。DAMA&#xff08;數據管理協會&#xff09;提出的參考數據&#xff08;Reference Data&#xff09;與主數據&#xff08;Master Data&…

力扣題解:2、兩數相加

個人認為&#xff0c;該題目可以看作合并兩個鏈表的變種題&#xff0c;本題與21題不同的是&#xff0c;再處理兩個結點時&#xff0c;對比的不是兩者的大小&#xff0c;而是兩者和是否大于10&#xff0c;加法計算中大于10要進位&#xff0c;所以我們需要聲明一個用來標記是否進…

深度學習部署包含哪些步驟?

深度學習部署包含哪些步驟&#xff1f; 階段說明示例工具模型導出把 .pt、.h5 等格式模型導出為通用格式&#xff08;如ONNX&#xff09;PyTorch, TensorFlow, ONNX推理優化減小模型體積、加速推理&#xff08;量化、剪枝&#xff09;TensorRT, ONNX Runtime系統集成將模型嵌入…

路由策略和策略路由的區別以及配置案例

區別 路由策略&#xff1a;路由策略是通過ACL等方式控制路由發布&#xff0c;讓對方學到適當路由條目&#xff0c;比如有20條路由&#xff0c;只想讓某個路由器學到10條&#xff0c;可以通過路由策略進行過濾。 策略路由&#xff1a;策略路由是通過定義策略和應用&#xff0c…

LeetCode 熱題 100 64. 最小路徑和

LeetCode 熱題 100 | 64. 最小路徑和 大家好&#xff0c;今天我們來解決一道經典的動態規劃問題——最小路徑和。這道題在 LeetCode 上被標記為中等難度&#xff0c;要求找到從網格的左上角到右下角的路徑&#xff0c;使得路徑上的數字總和為最小。 問題描述 給定一個包含非負…

JavaSE核心知識點02面向對象編程02-06(泛型)

&#x1f91f;致敬讀者 &#x1f7e9;感謝閱讀&#x1f7e6;笑口常開&#x1f7ea;生日快樂?早點睡覺 &#x1f4d8;博主相關 &#x1f7e7;博主信息&#x1f7e8;博客首頁&#x1f7eb;專欄推薦&#x1f7e5;活動信息 文章目錄 JavaSE核心知識點02面向對象編程02-06&#…

LVGL對象的盒子模型和樣式

文章目錄 &#x1f9f1; LVGL 對象盒子模型結構&#x1f50d; 組成部分說明&#x1f3ae; 示例代碼&#x1f4cc; 總結一句話 &#x1f9f1; 一、樣式的本質&#xff1a;lv_style_t 對象&#x1f3a8; 二、樣式應用的方式&#x1f9e9; 三、樣式屬性分類&#xff08;核心&#…

Github上如何準確地搜索開源項目

Github上如何準確地搜索開源項目&#xff1a; 因為尋找項目練手是最快速掌握技術的途徑&#xff0c;而Github上有最全最好的開源項目。 就像我的畢業設計“機器翻譯”就可以在Github上查找開源項目來參考。 以下搜索針對&#xff1a;項目名的關鍵詞&#xff0c;關注數限制&a…

正點原子IMX6U開發板移植Qt時出現亂碼

移植Qt時出現亂碼 1、前言2、問題3、總結 1、前言 記錄一下正點原子IMX6U開發板移植Qt時出現亂碼的解決方法&#xff0c;方便自己日后回顧&#xff0c;也可以給有需要的人提供幫助。 2、問題 用正點原子IMX6U開發板移植Qt時移植Qt后&#xff0c;sd卡里已經存儲了Qt的各種庫&…

python-django項目啟動尋找靜態頁面html順序

目錄結構 settings模塊 urls模塊 views模塊 1.settings文件下沒有DIR目錄,按照各app注冊順序尋找靜態頁面 啟動效果&#xff0c;直接返回注冊的app即app01下的templates文件夾下的html頁面 2.settings文件添加上DIR目錄 啟動效果&#xff0c;會優先去找項目下的templates文件…

MySQL索引詳解(上)(結構/分類/語法篇)

一、索引概述 索引本質是幫助MySQL高效獲取數據的排序數據結構&#xff08;類似書籍目錄&#xff09;&#xff0c;通過減少磁盤I/O次數提升查詢效率。其核心價值體現在大數據量場景下的快速定位能力&#xff0c;但同時帶來存儲和維護成本。 核心特點&#xff1a; 優點&#…

數據集-目標檢測系列- 煙霧 檢測數據集 smoke >> DataBall

數據集-目標檢測系列- 消防 濃煙 檢測數據集 smoke>> DataBall 數據集-目標檢測系列- 煙霧 檢測數據集 smoke &#xff1e;&#xff1e; DataBall * 相關項目 1&#xff09;數據集可視化項目&#xff1a;gitcode: https://gitcode.com/DataBall/DataBall-detections-10…

docker + K3S + Jenkins + Harbor自動化部署

最近公司在研究自動化部署的一套流程&#xff0c;下面記錄一下配置流程 需要提前準備好Jenkins Harbor Git(其他管理工具也可以) 我這里的打包編譯流程是Jenkins上配置打包任務-->自動到git目錄下找打包文件---->項目編譯后打鏡像包------>打完鏡像包將鏡像上傳到…