ES和 Kafka 集群搭建過程中的典型問題、配置規范及最佳實踐

Kafka 集群搭建與配置經驗庫文檔(完整會話匯總)

一、會話問題分類與解決方案
1. Elasticsearch 映射解析錯誤

問題現象

{"error":{"root_cause":[{"type":"mapper_parsing_exception","reason":"Root mapping definition has unsupported parameters:  [doc : {...}]"}

原因分析
Elasticsearch 7.x+ 移除了對類型(type)的支持,直接定義 doc 類型會導致錯誤。
解決方案
移除 doc 類型定義,將映射內容提升到根級別:

{"mappings": {"_source": {"enabled": true},"dynamic_templates": [{"string_as_keywords": {"match_mapping_type": "string","mapping": {"type": "keyword","norms": false}}}]}
}
2. Kafka 動態模板配置錯誤

問題現象

template must have match, path_match or match_mapping_type set {mapping={norms=false}}

原因分析
動態模板缺少 matchpath_matchmatch_mapping_type 匹配條件。
解決方案
添加 match_mapping_type 條件(示例):

"dynamic_templates": [{"string_as_keywords": {"match_mapping_type": "string","mapping": {"type": "keyword","norms": false}}}
]
3. ZooKeeper 命令未找到

問題現象

-bash: zookeeper-shell.sh: command not found

原因分析
系統無法找到 ZooKeeper 命令行工具,通常因未添加 Kafka 安裝路徑到環境變量。
解決方案

  • 臨時使用完整路徑執行:/opt/kafka/bin/zookeeper-shell.sh localhost:2181
  • 永久添加環境變量:
    export PATH=$PATH:/opt/kafka/bin
    source ~/.bashrc
    
4. Kafka 版本查看

問題方法

# 方法1:通過命令行工具
./kafka-topics.sh --version# 方法2:直接調用版本類
./kafka-run-class.sh kafka.KafkaVersion
5. 副本因子超過可用Broker數量

問題現象

Replication factor: 3 larger than available brokers: 1.

原因分析
創建主題時設置的副本因子(--replication-factor)大于集群中存活的Broker數量。
解決方案

  • 單節點測試時設為 --replication-factor 1
  • 確保所有Broker節點正常啟動并注冊到ZooKeeper。
6. Broker ID 沖突

問題現象

kafka.common.InconsistentBrokerIdException: Configured broker.id 2 doesn't match stored broker.id 1 in meta.properties.

原因分析
配置的 broker.id 與數據目錄中 meta.properties 記錄不一致。
解決方案

  1. 清理數據目錄:rm -rf /path/to/kafka/logs/*
  2. 確保 config/server.propertiesbroker.id 唯一且正確。
7. listeners 多端點沖突

問題現象

one or more brokers have multiple endpoints for PLAINTEXT

原因分析
同一Broker為 PLAINTEXT 協議配置了多個監聽地址。
解決方案
使用不同協議區分內外網訪問(示例):

listeners=INTERNAL://kafka-node1:9093,CLIENT://kafka-node1:9092
advertised.listeners=INTERNAL://kafka-node1:9093,CLIENT://kafka-node1:9092
listener.security.protocol.map=INTERNAL:PLAINTEXT,CLIENT:PLAINTEXT
inter.broker.listener.name=INTERNAL
二、Kafka 配置文件核心參數詳解
1. broker.id
  • 作用:唯一標識集群中的Broker,必須全局唯一。
  • 配置示例
    broker.id=1  # 節點1
    broker.id=2  # 節點2
    
  • 注意:更換節點或遷移數據時,需先清理舊數據目錄(log.dirs)。
2. listeners 與 advertised.listeners
  • 作用
    • listeners:定義Broker監聽的地址和協議。
    • advertised.listeners:向客戶端和其他Broker公布的地址。
  • 配置示例
    listeners=INTERNAL://kafka-node:9093,CLIENT://kafka-node:9092
    advertised.listeners=INTERNAL://kafka-node:9093,CLIENT://kafka-node:9092
    listener.security.protocol.map=INTERNAL:PLAINTEXT,CLIENT:PLAINTEXT
    inter.broker.listener.name=INTERNAL  # 內部通信協議
    
  • 注意:同一協議不可重復配置,跨網段需使用公網地址。
3. zookeeper.connect
  • 配置示例
    zookeeper.connect=zk1:2181,zk2:2181,zk3:2181/kafka
    
  • 注意:所有節點需指向同一ZooKeeper集群,生產環境建議≥3節點。
4. log.dirs
  • 配置示例
    log.dirs=/var/lib/kafka/logs
    
  • 注意:目錄需有讀寫權限,生產環境建議配置多磁盤路徑(log.dirs=/disk1/logs,/disk2/logs)。
三、集群部署全流程與驗證
1. 環境準備
  • 硬件要求
    • 內存:16GB+(JVM堆大小建議為物理內存的1/4,不超過32GB)。
    • 磁盤:SSD(順序讀寫性能優先)。
  • 網絡配置
    • 所有節點添加主機名解析到 /etc/hosts
      192.168.1.101 kafka-node1
      192.168.1.102 kafka-node2
      192.168.1.103 kafka-node3
      
    • 防火墻開放端口:9092(客戶端)、9093(內部通信)、2181(ZooKeeper)。
2. 啟動流程
  1. 啟動ZooKeeper集群(若獨立部署)。
  2. 按順序啟動Kafka節點:
    ./bin/kafka-server-start.sh -daemon /path/to/kafka/config/server.properties
    
  3. 驗證Broker注冊:
    ./zookeeper-shell.sh localhost:2181 ls /brokers/ids
    # 預期輸出:[1, 2, 3]
    
3. 功能測試
  • 創建主題
    ./kafka-topics.sh --create --bootstrap-server kafka-node1:9092 \--topic test-topic --partitions 3 --replication-factor 3
    
  • 生產消息
    ./kafka-console-producer.sh --bootstrap-server kafka-node1:9092 --topic test-topic
    
  • 消費消息
    ./kafka-console-consumer.sh --bootstrap-server kafka-node1:9092 \--topic test-topic --from-beginning
    
4. 高級驗證
  • 查看主題詳情
    ./kafka-topics.sh --describe --bootstrap-server kafka-node1:9092 --topic test-topic
    
  • 檢查副本同步狀態
    確認 Isr 列表包含所有副本,Leader 分布均勻。
四、生產環境最佳實踐
1. 高可用配置
  • 副本因子:生產環境建議 replication-factor ≥ 3
  • 最小同步副本:設置 min.insync.replicas ≥ 2,確保數據一致性。
2. 性能優化
  • 日志刷新策略
    log.flush.interval.messages=10000
    log.flush.interval.ms=1000
    
  • 批量發送
    producer.batch.size=16384
    producer.linger.ms=5
    
3. 監控與告警
  • JMX監控:配置 JMX_PORT=9999,使用 Prometheus + Grafana 監控以下指標:
    • kafka.server:type=BrokerTopicMetrics,name=MessagesInPerSec(消息入隊速率)
    • kafka.server:type=ReplicaManager,name=UnderReplicatedPartitions(副本不同步數量)
五、故障排查手冊
1. 無法連接到Broker
  • 檢查 listenersadvertised.listeners 配置。
  • 測試端口連通性:telnet kafka-node1 9092
2. 數據丟失風險
  • 檢查 min.insync.replicasacks 配置是否匹配。
  • 確認 unclean.leader.election.enable=false(禁止非同步副本成為Leader)。
3. 集群吞吐量低
  • 檢查磁盤IO是否瓶頸(使用 iostat -x 1)。
  • 調整分區數(建議分區數 = 節點數 × 3)。
六、配置文件模板(3節點集群)
節點1(broker.id=1)
broker.id=1
listeners=INTERNAL://kafka-node1:9093,CLIENT://kafka-node1:9092
advertised.listeners=INTERNAL://kafka-node1:9093,CLIENT://kafka-node1:9092
listener.security.protocol.map=INTERNAL:PLAINTEXT,CLIENT:PLAINTEXT
inter.broker.listener.name=INTERNAL
zookeeper.connect=zk1:2181,zk2:2181,zk3:2181/kafka
log.dirs=/var/lib/kafka/logs/node1
節點2(broker.id=2)
broker.id=2
listeners=INTERNAL://kafka-node2:9093,CLIENT://kafka-node2:9092
advertised.listeners=INTERNAL://kafka-node2:9093,CLIENT://kafka-node2:9092
listener.security.protocol.map=INTERNAL:PLAINTEXT,CLIENT:PLAINTEXT
inter.broker.listener.name=INTERNAL
zookeeper.connect=zk1:2181,zk2:2181,zk3:2181/kafka
log.dirs=/var/lib/kafka/logs/node2
節點3(broker.id=3)
broker.id=3
listeners=INTERNAL://kafka-node3:9093,CLIENT://kafka-node3:9092
advertised.listeners=INTERNAL://kafka-node3:9093,CLIENT://kafka-node3:9092
listener.security.protocol.map=INTERNAL:PLAINTEXT,CLIENT:PLAINTEXT
inter.broker.listener.name=INTERNAL
zookeeper.connect=zk1:2181,zk2:2181,zk3:2181/kafka
log.dirs=/var/lib/kafka/logs/node3

文檔說明

本經驗庫匯總了 Kafka 集群搭建過程中的典型問題、配置規范及最佳實踐,覆蓋從環境準備到生產部署的全流程。建議在實際操作中結合具體場景調整配置,并通過日志和監控工具持續優化集群性能。

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

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

相關文章

Linux-信號量

目錄 POSIX信號量 信號量的原理 信號量的概念 申請信號量失敗被掛起等待 信號量函數 二元信號量模擬實現互斥功能 基于環形隊列的生產消費模型 下面環形隊列采用數組模擬,用模運算來模擬環狀特性,類似如此 空間資源和數據資源 生產者和消費者申請…

Unity2D 街機風太空射擊游戲 學習記錄 #14 環射和散射組合 循環屏幕道具

概述 這是一款基于Unity引擎開發的2D街機風太空射擊游戲,筆者并不是游戲開發人,作者是siki學院的涼鞋老師。 筆者只是學習項目,記錄學習,同時也想幫助他人更好的學習這個項目 作者會記錄學習這一期用到的知識,和一些…

vue3 定時刷新

在Vue 3中實現定時刷新&#xff0c;你可以使用多種方法。這里列舉幾種常見的方法&#xff1a; 方法1&#xff1a;使用setInterval 這是最直接的方法&#xff0c;你可以在組件的mounted鉤子中使用setInterval來定時執行某些操作&#xff0c;例如重新獲取數據。 <template&…

局域網環境下瀏覽器安全限制的實用方法

在現代 Web 開發和網絡應用中&#xff0c;我們常常會遇到瀏覽器出于安全考慮對某些功能進行限制的情況。例如麥克風、攝像頭、地理位置等敏感功能&#xff0c;通常只能在 HTTPS 協議或 localhost 下使用。然而在局域網開發、測試或特定應用場景中&#xff0c;我們可能需要突破這…

如果你在為理解RDA、PCA 和 PCoA而煩惱,不妨來看看丨TomatoSCI分析日記

當你學習了 RDA、PCA 和 PCoA 這三種常見排序方法后&#xff0c;腦子里是不是也冒出過類似的疑問&#xff1a; PCA、PCoA、RDA 不都能畫圖嗎&#xff1f;是不是可以互相替代&#xff1f; RDA 圖上也有樣本點&#xff0c;那我還需要 PCoA 干什么&#xff1f; ... 這些看似“…

MySQL (二):范式設計

在 MySQL 數據庫設計中&#xff0c;范式設計是構建高效、穩定數據庫的關鍵環節。合理的范式設計能夠減少數據冗余、消除操作異常&#xff0c;讓數據組織更加規范和諧。然而&#xff0c;過度追求范式也可能帶來多表聯合查詢效率降低的問題。本文將深入講解第一范式&#xff08;1…

什么是財務共享中心?一文講清財務共享建設方案

目錄 一、財務共享中心是什么 1.標準化流程 2.集中化處理 3.智能化系統 4.專業化分工 二、財務共享中心的四大模塊 1. 共享系統 2. 共享流程 3. 共享組織 4. 共享數據 三、為什么很多財務共享中心做不下去&#xff1f; 1.只搬人&#xff0c;不換流程 2.系統買了&a…

001 雙指針

雙指針 雙指針&#xff08;Two Pointers&#xff09; 雙指針&#xff08;Two Pointers&#xff09; 對撞指針&#xff08;Opposite Direction Two Pointers&#xff09;&#xff1a; 對撞指針從兩端向中間移動&#xff0c;一個指針從最左端開始&#xff0c;另一個最右端開始&a…

【unitrix】 4.7 庫數字取反(not.rs)

一、源碼 這段代碼是用Rust語言實現的一個庫&#xff0c;主要功能是對數字進行位取反操作&#xff08;按位NOT運算&#xff09;。 /*庫數字取反* 編制人: $ource* 修改版次:0版完成版* 本版次創建時間: 2025年6月25日* 最后修改時間: 無* 待完善問題&#xff1a;無*/ use cor…

在ASP.NET Core WebApi中使用日志系統(Serilog)

一.引言 日志是構建健壯 Web API 的重要組成部分&#xff0c;能夠幫助我們追蹤請求、診斷問題、記錄關鍵事件。在 .Net 中&#xff0c;日志系統由內置的 Microsoft.Extensions.Logging 抽象提供統一接口&#xff0c;并支持多種第三方日志框架&#xff08;如 Serilog、NLog 等&…

(鏈表:哈希表 + 雙向鏈表)146.LRU 緩存

題目 請你設計并實現一個滿足 LRU (最近最少使用) 緩存 約束的數據結構。 LRU是Least Recently Used的縮寫&#xff0c;即最近最少使用&#xff0c;是一種常用的頁面置換算法&#xff0c;選擇最近最久未使用的頁面予以淘汰。該算法賦予每個頁面一個訪問字段&#xff0c;用來記…

Go Web開發框架實踐:模板渲染與靜態資源服務

Gin 不僅適合構建 API 服務&#xff0c;也支持 HTML 模板渲染和靜態資源托管&#xff0c;使其可以勝任中小型網站開發任務。 一、模板渲染基礎 1. 加載模板文件 使用 LoadHTMLGlob 或 LoadHTMLFiles 方法加載模板&#xff1a; r : gin.Default() r.LoadHTMLGlob("templ…

緩存與加速技術實踐-Kafka消息隊列

目錄 #1.1消息隊列 1.1.1什么是消息隊列 1.1.2消息隊列的特征 1.1.3為什么需要消息隊列 #2.1ksfka基礎與入門 2.1.1kafka基本概念 2.1.2kafka相關術語 2.1.3kafka拓撲架構 #3.1zookeeper概述介紹 3.1.1zookeeper應用舉例 3.1.2zookeeper的工作原理是什么&#xff1f; 3.1.3z…

鴻蒙前后端部署教程

第一步&#xff1a;部署Java后端 打開IDEA編輯器 第二步&#xff1a;用DevEco Studio運行鴻蒙端項目 然后按WinR鍵調出Win的命令行&#xff0c;輸入ipconfig 打開后端IDEA可以查看數據庫情況&#xff0c;如下圖

Python 常用定時任務框架介紹及代碼舉例

文章目錄 Python 常用定時任務框架簡介&#x1f9e9; 一、輕量級方案&#xff08;適合簡單任務&#xff09;1. **schedule庫** ?? 二、中級方案&#xff08;平衡功能與復雜度&#xff09;2. **APScheduler**3. **Celery Celery Beat** &#x1f680; 三、異步專用方案&#…

使用redis服務的redisson架構實現分布式鎖

加鎖 /*** 嘗試為指定的許可證 ID 獲取分布式鎖。如果鎖已被占用&#xff0c;則立即拋出業務異常。** param licenseId 需要加鎖的許可證 ID&#xff08;即鎖名稱&#xff09;* return true 表示成功獲取鎖&#xff0c;但請注意&#xff1a;* 鎖實際持有時間為 30 秒…

HTML表格元素

HTML表格元素深度解析與實戰應用 一、表格基本結構與語義化 1. 基礎表格元素詳解 <table> 容器元素 核心作用&#xff1a;定義表格容器重要屬性&#xff1a; border&#xff1a;已廢棄&#xff0c;應使用CSS設置邊框aria-label/aria-labelledby&#xff1a;為屏幕閱讀…

如何使用 Dockerfile 創建自定義鏡像

使用 Dockerfile 創建自定義鏡像的過程非常清晰&#xff0c;通常包括定義基礎鏡像、安裝依賴、復制代碼、設置環境變量和啟動命令等步驟。下面詳細講解從零創建自定義鏡像的完整流程。 一、什么是 Dockerfile&#xff1f; Dockerfile 是一個文本文件&#xff0c;定義了如何構建…

設置AWS EC2默認使用加密磁盤

問題 EC2磁盤需要使用默認加密。這里需要設置一下默認加密。 EC2

【樹的概念及其堆的實現】

樹的概念及其堆的實現 1.樹的概念2.樹的相關概念3.二叉樹的概念4. 滿二叉樹和完全二叉樹5.二叉樹的存儲結構6.二叉樹順序結構的實現的7.堆的結構及其實現 1.樹的概念 樹是一種非線性的數據結構&#xff0c;它是由n&#xff08;n>0&#xff09;個有限結點組成一個具有層次關系…