Kafka基於docker-compose單結點部署SASL_PLAINTEXT

PetterLiu發表於2024-04-14

Kafka基於docker-compose單結點部署SASL_PLAINTEXT

背景

Kafka是一個分散式流處理平臺,由LinkedIn開發並開源,如今在多個行業中都有廣泛的應用。以下是Kafka的當前用途以及行業應用的詳細描述:

**Kafka的用途**:

1. **訊息佇列**:Kafka最常見的用途之一是作為高效能的訊息佇列,用於解耦應用程式的各個部分之間的通訊。透過將訊息傳送到Kafka主題,不同的應用程式可以非同步地交換資料,並且可以根據需要調整消費速率和處理能力。這種解耦方式使得系統更加靈活,易於擴充套件和維護。
2. **日誌收集和分析**:Kafka也被廣泛用於收集和儲存大規模系統產生的日誌資料。生產者將日誌訊息傳送到Kafka主題,然後可以使用消費者實時消費和分析這些日誌資料,進行監控、報警、分析和故障排查等操作。
3. **事件驅動架構**:Kafka提供了一種可靠的事件流平臺,用於構建事件驅動架構(EDA)。透過將事件傳送到Kafka主題,並使用流處理工具(如Kafka Streams),可以實現事件的實時處理和響應。
4. **實時資料處理**:Kafka可以構建實時資料處理系統,接收並傳輸大量實時資料,與多種流處理框架如Apache Storm、Apache Flink結合,實現高吞吐量和低延遲處理。

**Kafka的行業應用**:

1. **金融行業**:Kafka在金融行業中的應用非常廣泛,特別是在處理實時交易資料、風控分析以及市場資料分發等方面。金融機構可以利用Kafka實現高效的資料傳輸和實時分析,從而快速響應市場變化並做出決策。
2. **電商行業**:在電商領域,Kafka被用於處理訂單資料、使用者行為資料以及商品推薦等場景。透過實時收集和分析這些資料,電商企業可以最佳化使用者體驗、提升轉化率並實現精準營銷。
3. **物聯網行業**:隨著物聯網裝置的普及,Kafka在物聯網領域的應用也日益增多。它可以接收並處理各種感測器資料,如溫度、溼度和氣壓等,實現資料的實時分析和監控。
4. **日誌管理**:Kafka支援集中式日誌收集,將生成的各類日誌資料集中儲存,以便後續進行實時或離線的分析。透過將資料傳送到主題,可實現高效的處理。
5. **資料備份與複製**:Kafka提供資料備份與複製的機制,能將資料複製到多個Kafka叢集,確保高可用性和容錯性,尤其適用於需要資料可靠性和永續性的應用如分散式資料庫和檔案系統。

SASL PLAINTEXT是一種認證機制,用於Kafka叢集中保護資料傳輸的安全性。它基於SASL(Simple Authentication and Security Layer)框架,使用明文密碼進行身份驗證。儘管在傳輸過程中,SASL協議會對資料進行加密,但由於客戶端傳送的使用者名稱和密碼是未加密的,因此,SASL PLAINTEXT被認為是一種不太安全的認證方式。然而,它仍然被廣泛採用,尤其在測試環境中,或對於配置和運維成本要求較小的小型公司中的Kafka叢集。

SASL是一種用來擴充C/S驗證模式的認證機制,它規範了Client和Server之間的應答過程以及傳輸內容的編碼方法。SASL驗證架構決定了伺服器如何儲存客戶端身份證書以及如何核驗客戶端提供的密碼。一旦客戶端透過驗證,伺服器端就能確定使用者的身份,並據此決定使用者具有的許可權。

在Kafka中,SASL PLAINTEXT認證通常與SSL加密搭配使用,以提高安全性。在使用SASL PLAINTEXT認證時,需要對Kafka伺服器和客戶端進行相應的配置。例如,在Kafka伺服器的配置檔案中,需要設定監聽地址、協議型別以及認證機制等引數。而在Kafka客戶端上,則需要配置認證資訊,如使用者名稱和密碼等。

請注意,儘管SASL PLAINTEXT在某些場景下可能適用,但在對安全性要求較高的生產環境中,建議使用更為安全的認證方式,如SASL/GSSAPI(Kerberos)或SASL/SCRAM等。這些認證方式提供了更強的密碼加密和動態更新機制,能夠更好地保護Kafka叢集中的資料安全。

方案

密碼生成器

https://www.avast.com/zh-cn/random-password-generator

兩個關鍵核心配置檔案

server_jaas.conf

Client {
org.apache.zookeeper.server.auth.DigestLoginModule required
username = "admin"
password = "RvB9SuYrJMPR";
};
Server {
org.apache.zookeeper.server.auth.DigestLoginModule required
username = "admin"
password = "RvB9SuYrJMPR"
user_super = "RvB9SuYrJMPR"
user_admin = "RvB9SuYrJMPR";
};
KafkaServer {
org.apache.kafka.common.security.plain.PlainLoginModule required
username = "admin"
password = "RvB9SuYrJMPR"
user_admin = "RvB9SuYrJMPR";
};
KafkaClient {
org.apache.kafka.common.security.plain.PlainLoginModule required
username = "admin"
password = "RvB9SuYrJMPR";
};


zoo.cfg

# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/opt/zookeeper-3.4.13/data
# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the
# administrator guide before turning on autopurge.
#
#
http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
autopurge.purgeInterval=1

## 開啟SASl關鍵配置
authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider

requireClientAuthScheme=sasl

jaasLoginRenew=3600000
zookeeper.sasl.client=true


對以下字串base64加密,https://www.base64decode.org/ 實現簡單encode

sasl.mechanism: PLAIN
security.protocol: SASL_PLAINTEXT
sasl.jaas.config: org.apache.kafka.common.security.scram.ScramLoginModule required username='admin' password='RvB9SuYrJMPR';


kafdrop

**obsidiandynamics/kafdrop是一個Kafka開源視覺化工具**,它提供了Web UI介面,用於檢視Kafka主題和瀏覽消費者組。透過這個工具,使用者可以顯示代理、主題、分割槽、消費者等資訊,並且可以預覽topic訊息。Kafdrop支援Windows平臺環境,並且幾乎不需要配置,只需透過簡單的命令即可執行。在Docker環境下,使用者可以搜尋並拉取obsidiandynamics/kafdrop映象,然後透過一系列配置命令啟動Kafdrop服務。啟動後,使用者可以透過訪問指定的Web頁面來檢視和管理Kafka的相關資訊。

因此,obsidiandynamics/kafdrop的主要作用是為使用者提供一個直觀、便捷的方式來檢視和管理Kafka叢集的狀態和資料,從而方便使用者對Kafka進行監控和維護。


最後我們的docker-compose.yaml檔案是這樣的:

version: '3.8'
services:
zookeeper:
image: wurstmeister/zookeeper
volumes:
- ./data/zookeeper:/data
- ./config:/opt/zookeeper-3.4.13/conf
- ./config:/opt/zookeeper-3.4.13/secrets
container_name: zookeeper
environment:
ZOOKEEPER_CLIENT_PORT: 2181
ZOOKEEPER_TICK_TIME: 2000
SERVER_JVMFLAGS: -Djava.security.auth.login.config=/opt/zookeeper-3.4.13/secrets/server_jaas.conf
ports:
- 2181:2181
restart: always
kafka:
image: wurstmeister/kafka
container_name: kafka
depends_on:
- zookeeper
ports:
- 9092:9092
volumes:
- ./data/kafka:/kafka
- ./config:/opt/kafka/secrets
environment:
KAFKA_BROKER_ID: 0
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_LISTENERS: INTERNAL://:9093,EXTERNAL://:9092
KAFKA_ADVERTISED_LISTENERS: INTERNAL://kafka:9093,EXTERNAL://172.18.0.155:9092
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INTERNAL:SASL_PLAINTEXT,EXTERNAL:SASL_PLAINTEXT
ALLOW_PLAINTEXT_LISTENER: 'yes'
KAFKA_AUTO_CREATE_TOPICS_ENABLE: 'true'
KAFKA_INTER_BROKER_LISTENER_NAME: INTERNAL
KAFKA_SASL_ENABLED_MECHANISMS: PLAIN
KAFKA_SASL_MECHANISM_INTER_BROKER_PROTOCOL: PLAIN
KAFKA_OPTS: -Djava.security.auth.login.config=/opt/kafka/secrets/server_jaas.conf
restart: always
## kafdrop 監控kafka的Ui工具
kafdrop:
image: obsidiandynamics/kafdrop
restart: always
ports:
- "19001:9000"
environment:
KAFKA_BROKERCONNECT: "kafka:9093"
## 如kafka開啟了sasl認證後以下 sasl認證連結是必要的,下面的事經過base64加密後的結果
KAFKA_PROPERTIES: c2FzbC5tZWNoYW5pc206IFBMQUlOCiAgICAgIHNlY3VyaXR5LnByb3RvY29sOiBTQVNMX1BMQUlOVEVYVAogICAgICBzYXNsLmphYXMuY29uZmlnOiBvcmcuYXBhY2hlLmthZmthLmNvbW1vbi5zZWN1cml0eS5zY3JhbS5TY3JhbUxvZ2luTW9kdWxlIHJlcXVpcmVkIHVzZXJuYW1lPSdhZG1pbicgcGFzc3dvcmQ9J1J2QjlTdVlySk1QUic7
depends_on:
- zookeeper
- kafka
cpus: '1'
mem_limit: 1024m
container_name: kafdrop


原始碼

https://github.com/megadotnet/Kafka-docker-compose/tree/main/Kafka-Docker-Compose-SASL_PLAINTEXT


參考

https://docs.confluent.io/platform/current/kafka/authentication_sasl/authentication_sasl_plain.html

https://github.com/obsidiandynamics/kafdrop



今天先到這兒,希望對雲原生,技術領導力, 企業管理,系統架構設計與評估,團隊管理, 專案管理, 產品管理,團隊建設 有參考作用 , 您可能感興趣的文章:
領導人怎樣帶領好團隊
構建創業公司突擊小團隊
國際化環境下系統架構演化
微服務架構設計
影片直播平臺的系統架構演化
微服務與Docker介紹
Docker與CI持續整合/CD
網際網路電商購物車架構演變案例
網際網路業務場景下訊息佇列架構
網際網路高效研發團隊管理演進之一
訊息系統架構設計演進
網際網路電商搜尋架構演化之一
企業資訊化與軟體工程的迷思
企業專案化管理介紹
軟體專案成功之要素
人際溝通風格介紹一
精益IT組織與分享式領導
學習型組織與企業
企業創新文化與等級觀念
組織目標與個人目標
初創公司人才招聘與管理
人才公司環境與企業文化
企業文化、團隊文化與知識共享
高效能的團隊建設
專案管理溝通計劃
構建高效的研發與自動化運維
某大型電商雲平臺實踐
網際網路資料庫架構設計思路
IT基礎架構規劃方案一(網路系統規劃)
餐飲行業解決方案之客戶分析流程
餐飲行業解決方案之採購戰略制定與實施流程
餐飲行業解決方案之業務設計流程
供應鏈需求調研CheckList
企業應用之效能實時度量系統演變
Openshift與Kubernetes的區別

如有想了解更多軟體設計與架構, 系統IT,企業資訊化, 團隊管理 資訊,請關注我的微信訂閱號:

MegadotnetMicroMsg_thumb1_thumb1_thu[2]

作者:Petter Liu
出處:http://www.cnblogs.com/wintersun/
本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連線,否則保留追究法律責任的權利。 該文章也同時釋出在我的獨立部落格中-Petter Liu Blog。

相關文章