【Docker实战】华为云FlexusX实例下的Kafka集群部署实践与性能优化
前言
华为云FlexusX实例,以创新的柔性算力技术,为Kafka集群部署带来前所未有的性能飞跃。其灵活的CPU与内存配比,结合智能调度与加速技术,让Kafka在高并发场景下依然游刃有余。FlexusX实例携手海量优惠,助力企业轻松上云,享受数字化转型的加速红利。
链接直达:华为云Flexus云服务器X实例
Kafka简介
Kafka
是一个性能、高吞吐量的分布式发布订阅消息系统,专为处理大规模数据流而设计。作为Apache顶级项目之一,Kafka以其卓越的扩展性、持久性和可靠性,在大数据和实时处理领域占据重要地位。它允许生产者(数据发送者)以高吞吐量向Kafka集群
发布消息,而消费者(数据接收者)则可以以低延迟从集群中读取消息。Kafka
通过将消息存储到多个分区中,并在多个broker(服务器)之间复制这些分区,实现了数据的高可用性和容错性。
Kafka
不仅支持简单的消息传递,还具备强大的流处理能力,能够与各种流处理框架无缝集成,实现复杂的数据转换和分析任务。其灵活的消息模型和可扩展的架构,使得Kafka
能够轻松应对各种应用场景,包括日志收集、事件监控、消息队列以及实时数据管道等。
ZooKeeper简介
ZooKeeper
是一个开源的分布式协调服务,它为分布式应用提供一致性服务,主要用于管理大型分布式系统中的配置信息、命名服务、分布式同步以及提供组服务等,通过其简单的API和强大的功能,使得分布式系统中的各个组件能够相互协调、协同工作。
华为云Flexus X实例部署Kafka集群的亮点
灵活配置:通过柔性计算技术,自由调整CPU、内存资源,匹配Kafka需求。
高性能&可扩展:增强Kafka的高吞吐、高可用特性,支持便捷的水平扩展。
无缝集成&自动化:华为云服务助力无缝集成,支持自动化运维,减少人工干预。
安全可靠:集成华为云安全体系,结合Kafka副本机制,确保数据安全和服务可用。
成本效益:智能化运维降低运维成本,提高运维效率。
响应速度:提升业务系统处理实时数据流的响应速度。
业务连续性:故障自动迁移和容错能力,保障业务稳定运行。
促进创新:灵活性和可扩展性支持快速调整,应对市场变化和挑战。
环境规划
操作系统 | Zookeeper | Kafka | docker | docker-compose | 连接方式 |
---|---|---|---|---|---|
Huawei Cloud EulerOS 2.0 | zookeeper | wurstmeister/kafka | 27.1.1 | 2.29.1 | 本地==shell== |
本次实验环境中,准备搭建一台
zookeeper
以及三个Kafka broker
组成的Kafka Cluster
部署流程
需要了解:
- 采用
docker
方式进行部署kafka
集群- 详细购买配置实例可参考文章: 快速部署华为云Flexus X实例,开启您的云端之旅
- 部署docker服务请参考文章:华为FlexusX与Docker+Nginx的高效整合之路
拉取镜像
查看并拉取
zookeeper
镜像(镜像尽量拉取官方镜像)
# 默认拉取最新版
[root@flexusx-251f ~]# docker search zookeeper
NAME DESCRIPTION STARS OFFICIAL
zookeeper Apache ZooKeeper is an open-source server wh… 1452 [OK]
bitnamizookeeper Bitnami container image for ZooKeeper 122
chainguardzookeeper Minimal image with Apache Zookeeper. 0
rapidfortzookeeper RapidFort optimized, hardened image for Zook… 9
ubuntuzookeeper ZooKeeper maintains configuration informatio… 13
..............................
[root@flexusx-251f ~]# docker pull zookeeper
Using default tag latest
latest Pulling from libraryzookeeper
f7ec5a41d630 Already exists
faf4c47c8c61 Pull complete
810072571faf Pull complete
ca2026cde8de Pull complete
560b60c59d86 Pull complete
48a7bbbfc8eb Pull complete
56ff45ef75e6 Pull complete
e28096689586 Pull complete
Digest sha256ecc855e80a6c36a9864e7c1ccc0b68a13595871f88bc8a97e7f2c82a8e9803b2
Status Downloaded newer image for zookeeperlatest
docker.iolibraryzookeeperlatest
查看并拉取
kafka
镜像(镜像尽量拉取官方镜像)
[root@flexusx-251f ~]# docker search kafka
NAME DESCRIPTION STARS OFFICIAL
chainguard/kafka Minimal image with Kafka. 0
bitnami/kafka Bitnami container image for Apache Kafka 884
ubuntu/kafka Apache Kafka, a distributed event streaming … 51
apache/kafka Apache Kafka 63
rancher/kafka 2
bitnamicharts/kafka
..............................
[root@flexusx-251f ~]# docker pull bitnami/kafka
Using default tag: latest
latest: Pulling from bitnami/kafka
2449408de487: Pull complete
Digest: sha256:999ba91863ef67e13c5704c3145154d0484671222dab2a603bfdeedc4a9fbad7
Status: Downloaded newer image for bitnami/kafka:latest
docker.io/bitnami/kafka:latest
编写docker-compose.yaml
编写
docker-compose.yaml
[root@flexusx-251f ~]# mkdir /kafka
[root@flexusx-251f ~]# cd /kafka/
[root@flexusx-251f kafka]# vim docker-compose.yaml
version: '2.9'
services:
zookeeper:
image: zookeeper:latest
ports:
- "2181:2181" # 将容器的2181端口映射到宿主机的2181端口
environment:
ZOO_MY_ID: 1 # 设置Zookeeper节点的ID为1
ZOO_SERVERS: server.1=zookeeper:2888:3888;2181 # 配置Zookeeper集群信息,我们只定义了一个节点,所以为单个
kafka1:
image: bitnami/kafka:latest
depends_on:
- zookeeper
ports:
- "9092:9092"
environment:
KAFKA_BROKER_ID: 1 # 设置Kafka broker的ID为1
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 # 指定Kafka如何连接到Zookeeper
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka1:9092 # 设置Kafka broker对外部客户端广播的地址和端口
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT
KAFKA_INTER_BROKER_PROTOCOL_VERSION: 2.8
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
kafka2:
image: bitnami/kafka:latest
depends_on:
- zookeeper
ports:
- "9093:9092"
environment:
KAFKA_BROKER_ID: 2
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka2:9092
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT
KAFKA_INTER_BROKER_PROTOCOL_VERSION: 2.8
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
kafka3:
image: bitnami/kafka:latest
depends_on:
- zookeeper
ports:
- "9094:9092"
environment:
KAFKA_BROKER_ID: 3
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka3:9092
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT
KAFKA_INTER_BROKER_PROTOCOL_VERSION: 2.8
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
创建容器
执行
docker-compose
,开始创建容器
[root@flexusx-251f kafka]# docker-compose up -d
WARN[0000] /kafka/docker-compose.yaml: the attribute `version` is obsolete, it will be ignored, please remove it to avoid potential confusion
[+] Running 5/5
✔ Network kafka_default Created 0.0s
✔ Container kafka-zookeeper-1 Started 0.2s
✔ Container kafka-kafka2-1 Started 0.3s
✔ Container kafka-kafka3-1 Started 0.3s
✔ Container kafka-kafka1-1 Started 0.3s
查看容器状态(全部正常运行如果不正常请查看日志)
[root@flexusx-251f kafka]# docker-compose ps
WARN[0000] /kafka/docker-compose.yaml: the attribute `version` is obsolete, it will be ignored, please remove it to avoid potential confusion
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
kafka-kafka1-1 bitnami/kafka:latest "/opt/bitnami/script…" kafka1 7 seconds ago Up 6 seconds 0.0.0.0:9092->9092/tcp, :::9092->9092/tcp
kafka-kafka2-1 bitnami/kafka:latest "/opt/bitnami/script…" kafka2 7 seconds ago Up 6 seconds 0.0.0.0:9093->9092/tcp, :::9093->9092/tcp
kafka-kafka3-1 bitnami/kafka:latest "/opt/bitnami/script…" kafka3 7 seconds ago Up 6 seconds 0.0.0.0:9094->9092/tcp, :::9094->9092/tcp
kafka-zookeeper-1 zookeeper:latest "/docker-entrypoint.…" zookeeper 7 seconds ago Up 6 seconds 2888/tcp, 3888/tcp, 0.0.0.0:2181->2181/tcp, :::2181->2181/tcp, 8080/tcp
放行安全组
放行端口
2181,9092,9093,9094
基本使用
创建主题
进入容器内部,并进入
bin
目录下(脚本文件都在这个目录下)
[root@flexusx-251f kafka]# docker exec -it kafka-kafka1-1 /bin/bash
I have no name!@6a5684babfc1:/$ ls
bin dev etc lib64 opt run srv usr
bitnami docker-entrypoint-initdb.d home media proc run.sh sys var
boot entrypoint.sh lib mnt root sbin tmp
I have no name!@6a5684babfc1:/$ cd /opt/bitnami/kafka/bin/
创建主题(任意一个kafka即可)
- 使用
kafka-topics.sh
脚本在Kafka集群(通过123.249.27.118:9092
访问)中创建一个名为topic1
的新主题,该主题包含3个分区,每个分区有3个副本。
I have no name!@6a5684babfc1:/opt/bitnami/kafka/bin$ ./kafka-topics.sh --create --bootstrap-server 123.249.27.118:9092 --replication-factor 3 --partitions 3 --topic topic1
Created topic topic1.
命令不知道如何使用,可以进行
help
查询
./kafka-topics.sh --help
查看主题
查看主题,
- 使用
kafka-topics.sh
脚本描述(或查询)Kafka集群(通过123.249.27.118:9092
访问)中名为topic1
的主题的详细信息。
I have no name!@6a5684babfc1:/opt/bitnami/kafka/bin$ kafka-topics.sh --describe --bootstrap-server 123.249.27.118:9092 --topic topic1
[2024-09-11 02:21:00,753] WARN [AdminClient clientId=adminclient-1] The DescribeTopicPartitions API is not supported, using Metadata API to describe topics. (org.apache.kafka.clients.admin.KafkaAdminClient)
Topic: topic1 TopicId: V1q3U6OxR1G5Umo203kvPQ PartitionCount: 3 ReplicationFactor: 3 Configs:
Topic: topic1 Partition: 0 Leader: 3 Replicas: 3,1,2 Isr: 3,1,2 Elr: N/A LastKnownElr: N/A
Topic: topic1 Partition: 1 Leader: 1 Replicas: 1,2,3 Isr: 1,2,3 Elr: N/A LastKnownElr: N/A
Topic: topic1 Partition: 2 Leader: 2 Replicas: 2,3,1 Isr: 2,3,1 Elr: N/A LastKnownElr: N/A
通过执行
kafka-topics.sh
脚本的describe
命令,并指定bootstrap-server
为123.249.27.118:9092
以及查询的topic
为topic1
,我们观察到该主题的3个分区被均匀且成功地分配到了Kafka集群的三个broker上,这标志着这三个broker已经构建了一个高效协作、稳定运行的Kafka集群环境。
查看主题列表
I have no name!@6a5684babfc1:/opt/bitnami/kafka/bin$ ./kafka-topics.sh --bootstrap-server localhost:9092 --list
topic1
修改主题信息
分区数只能增加,不能减少;副本数不支持修改。
I have no name!@6a5684babfc1:/opt/bitnami/kafka/bin$ ./kafka-topics.sh --bootstrap-server localhost:9092 --alter --topic topic1 --partitions 4
[2024-09-11 03:23:54,240] WARN [AdminClient clientId=adminclient-1] The DescribeTopicPartitions API is not supported, using Metadata API to describe topics. (org.apache.kafka.clients.admin.KafkaAdminClient)
I have no name!@6a5684babfc1:/opt/bitnami/kafka/bin$ kafka-topics.sh --describe --bootstrap-server 123.249.27.118:9092 --topic topic1
[2024-09-11 03:24:17,033] WARN [AdminClient clientId=adminclient-1] The DescribeTopicPartitions API is not supported, using Metadata API to describe topics. (org.apache.kafka.clients.admin.KafkaAdminClient)
Topic: topic1 TopicId: V1q3U6OxR1G5Umo203kvPQ PartitionCount: 4 ReplicationFactor: 3 Configs:
Topic: topic1 Partition: 0 Leader: 3 Replicas: 3,1,2 Isr: 3,1,2 Elr: N/A LastKnownElr: N/A
Topic: topic1 Partition: 1 Leader: 1 Replicas: 1,2,3 Isr: 1,2,3 Elr: N/A LastKnownElr: N/A
Topic: topic1 Partition: 2 Leader: 2 Replicas: 2,3,1 Isr: 2,3,1 Elr: N/A LastKnownElr: N/A
Topic: topic1 Partition: 3 Leader: 3 Replicas: 3,2,1 Isr: 3,2,1 Elr: N/A LastKnownElr: N/A
删除主题
I have no name!@6a5684babfc1:/opt/bitnami/kafka/bin$ kafka-topics.sh --bootstrap-server localhost:9092 --delete --topic topic1
# 可以看到,已经没有主题存在了
I have no name!@6a5684babfc1:/opt/bitnami/kafka/bin$ kafka-topics.sh --bootstrap-server localhost:9092 --list
体验和感受
在大数据与实时流处理领域,Kafka
以其高吞吐量、低延迟和可扩展性赢得了广泛赞誉。而华为云FlexusX实例
,以其卓越的计算性能、灵活的资源配置和稳定的云环境,为Kafka集群
的部署提供了理想平台。
在FlexusX实例上部署Kafka集群,不仅能够充分利用其强大的计算资源,还能通过精细化的配置与优化,实现集群性能的最大化。我们结合华为云提供的专业指导与最佳实践,对Kafka集群
进行了深度优化,包括网络配置、存储优化、分区与副本策略调整等,确保Kafka在高并发、大数据量场景下依然能够稳定运行,提供卓越的服务质量。
- 点赞
- 收藏
- 关注作者
评论(0)