自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

牢記這三種方法!即便沒有Zookeeper也能運行Kafka

原創(chuàng)
云計算 Kafka
從 Kafka 2.8 開始,在沒有 Zookeeper 的情況下也可以運行 Kafka 集群。本文將介紹三種方法,它們可以在使用容器單節(jié)點集群的情況下運行Kafka。

???

【51CTO.com原創(chuàng)稿件】從 Kafka 2.8 開始,在沒有 Zookeeper 的情況下也可以運行 Kafka 集群。本文將介紹三種方法,它們可以在使用容器單節(jié)點集群的情況下運行Kafka。

Apache Zookeeper作為Kafka的依賴項一直用來管理Apache Kafka的元數據。值得慶幸的是從Kafka 2.8 版本開始,就可以在沒有 Zookeeper 的情況下運行 Kafka 集群了。下面就給大家介紹使用容器單節(jié)點集群的三種簡單方法。

Control plane(控制面)和data plane(數據面)

Apache Kafka 為其集群實現了獨立的control plane(控制面)和data plane(數據面)。Control plane用來管理集群,跟蹤哪些brokers(代理)處于活動狀態(tài),并在set(集合)更改時采取對應的行動。同時,data plane(數據面)需要處理producer(生產者)和consumer(消費者)及其兩者產生的記錄信息。在之前的Kafka 版本中,Zookeeper 是實現Control plane功能的主要集群組件。

經過幾年的努力,Kafka實現了Control plane的第一版功能,我們把此次更新稱為KIP-500。其中 Apache Kafka Raft(也稱為 KRaft)是為取代 Zookeeper 而引入的新共識協議。brokers可以作為仲裁控制器的角色來管理集群Control plane(控制面)。此更改簡化了集群部署、監(jiān)控和管理等功能。新的 KRaft 控制器可以在 Apache Kafka 2.8中體驗到。

容器化單節(jié)點

Apache Kafka的強項是消息處理機制的水平擴展和管理高吞吐量的消息,這也是一直推動Kafka發(fā)展的源動力。正因為如此,需要在生產環(huán)境的Kafka集群中使用多個broker完成上述功能。為了簡單和快速入門今天的知識點,這里會從單節(jié)點集群切入給大家介紹Kafaka是如何進行進群管理的。

本文會使用Strimzi容器來包含所需要的應用環(huán)境。Strimzi 是Cloud Native Computing Foundation項目成員,它讓Apache Kafka在Kubernetes 運行起來更加從容,同時還提供了一套成熟的操作集合和容器鏡像。

在本文中,我們將通過Quay Container Registry 發(fā)布和應用 Apache Kafka 2.8.1 鏡像。

Docker 或 Podman

首先需要在同一實例中運行具有代理和控制器角色的單個容器。安裝Docker或Podman并執(zhí)行以下命令:

docker run -it --name kafka-zkless -p 9092:9092 -e LOG_DIR=/tmp/logs quay.io/strimzi/kafka:latest-kafka-2.8.1-amd64 /bin/sh -c 'export CLUSTER_ID=$(bin/kafka-storage.sh random-uuid) && bin/kafka-storage.sh format -t $CLUSTER_ID -c config/kraft/server.properties && bin/kafka-server-start.sh config/kraft/server.properties' 

上面的命令啟動一個名為“kafka-zkless”的容器并暴露Kafka的端口 9092。我們覆蓋entry point(入口點)的信息,這里包括三個方面的工作。

第一、設置環(huán)境變量,通過UUID設置集群ID。

第二、通過執(zhí)行`kafka-storage.sh`腳本來格式化存儲目錄。

第三、使用 KRaft 配置啟動 Kafka 服務器。

同時,可以使用標準的 Kafka 工具(如kcat:以前稱為 kafkacat)連接到broker生成和使用相關記錄。

Docker Compose

您可以使用Compose 規(guī)范來定義您的組件。如圖 1 所示, docker-compose yaml 文件的示例:

???

圖1

從圖中可以看出通過container_name定義容器名稱,image定義容器鏡像,其中command的部分是要執(zhí)行的命令。由于該命令過長將其分成兩行解釋(實際上是一行,這里人為加入了回車為的是方便大家閱讀),上面的一行和Docker中的命令一致,包括集群ID定義、格式化存儲目錄以及啟動Kafaka服務器的部分。下面一行主要是重寫了advertised中的listeners、security.protocol.map 以及l(fā)isteners的信息。接著就是定義ports 端口為9092,在environment中定義了需要在命令行中重寫的三類信息:KAFKA_ADVERTISED_LISTENERS 對應advertised中的listeners;KAFKA_LISTENER_SECURITY_PROTOCOL_MAP對應security.protocol.map;KAFKA_LISTENERS對應listeners的信息。

可以通過如下命令執(zhí)行上述示例:

docker-compose up -d 

本例會公開主機9092端口,如果需要在更廣泛的組合部署中訪問它,可以將其修改為kafka:29092,避免與其他端口沖突。

Kubernetes 部署

如果習慣使用Kubernetes,您可以如圖2 所示的部署描述:

???

圖2

如圖2 所示,我們關注containers節(jié)點下面的內容,容器的名字為zkless-kafka,通過image定義了容器鏡像,在command中定義容器啟動時候的命令。

和Docker一樣由于該命令過長將其分成兩行解釋,上面的一行依舊包括集群ID定義、格式化存儲目錄以及啟動Kafaka服務器的部分。下面一行只定義了advertised的listeners 的信息,這個信息是從env(環(huán)境變量)中的KAFKA_ADVERTISED_LISTENERS 對應的value中讀取。

可以通過如下命令執(zhí)行上面的文件:

kubectl apply -f kubernetes.yaml 

執(zhí)行之后會對鏡像進行部署,將通過使用zkless-kafka-bootstrap主機名公開引導服務器。同時會對部署服務器所在的當前命名空間的訪問限制。此時就可以和其他advertised listeners(廣播監(jiān)聽者)一樣獲取你想要的消息了。

概括

本文簡要介紹了 Apache Kafka 新Control plane(控制面)的實現。由于上一個版本的Kafaka完成集群控制的功能,借此可以使用功能強大的 Zookeeperless Kafka 集群。我們回顧了使用容器鏡像部署單節(jié)點集群的三種簡單方法:執(zhí)行簡單的 Docker 或 podman 命令、執(zhí)行 docker-compose 文件以及在 Kubernetes 上部署運行中的 pod。

作者簡介

崔皓,51CTO社區(qū)編輯,資深架構師,擁有18年的軟件開發(fā)和架構經驗,10年分布式架構經驗。曾任惠普技術專家。樂于分享,撰寫了很多熱門技術文章,閱讀量超過60萬。《分布式架構原理與實踐》作者。

【51CTO原創(chuàng)稿件,合作站點轉載請注明原文作者和出處為51CTO.com】

責任編輯:華軒 來源: 51CTO
相關推薦

2015-06-03 14:53:34

SQL文件系統備份

2021-09-11 22:54:32

Windows 11Windows微軟

2009-07-08 12:56:32

編寫Servlet

2021-10-10 12:29:27

機器人AI人工智能

2021-02-09 00:14:24

Windows 10Windows微軟

2013-01-04 15:47:54

Android開發(fā)平鋪UI設計

2011-06-10 10:43:12

Ubuntu應用安裝

2009-06-23 10:45:18

Hibernate支持

2009-12-11 18:49:39

預算編制博科資訊

2022-07-13 16:06:16

Python參數代碼

2024-11-15 07:00:00

Python發(fā)送郵件

2011-04-18 15:32:45

游戲測試測試方法軟件測試

2023-08-14 17:58:13

RequestHTTP請求

2010-09-14 15:10:49

CSS注釋

2014-04-01 10:38:09

Linux操作系統

2012-09-19 14:33:51

創(chuàng)業(yè)程序員創(chuàng)業(yè)成功

2020-06-17 10:52:00

DDoS攻擊網絡攻擊網絡安全

2016-10-12 13:53:38

JavaByteBufferRandomAcces

2025-04-02 07:22:19

2010-09-08 13:29:48

CSS
點贊
收藏

51CTO技術棧公眾號