华为云 FlexusX 实例下的 Kafka 集群部署实践与性能优化
前言
华为云 FlexusX 实例,以创新的柔性算力技术,为 Kafka 集群部署带来前所未有的性能飞跃。其灵活的 CPU 与内存配比,结合智能调度与加速技术,让 Kafka 在高并发场景下依然游刃有余。在 828 华为云企业上云节期间,FlexusX 实例携手海量优惠,助力企业轻松上云,享受数字化转型的加速红利。链接直达:华为云Flexus云服务器X实例
Kafka 简介
Kafka 是一个性能、高吞吐量的分布式发布订阅消息系统,专为处理大规模数据流而设计。作为 Apache 顶级项目之一,Kafka 以其卓越的扩展性、持久性和可靠性,在大数据和实时处理领域占据重要地位。它允许生产者(数据发送者)以高吞吐量向 Kafka 集群发布消息,而消费者(数据接收者)则可以以低延迟从集群中读取消息。Kafka 通过将消息存储到多个分区中,并在多个 broker(服务器)之间复制这些分区,实现了数据的高可用性和容错性。
Kafka 不仅支持简单的消息传递,还具备强大的流处理能力,能够与各种流处理框架无缝集成,实现复杂的数据转换和分析任务。其灵活的消息模型和可扩展的架构,使得 Kafka 能够轻松应对各种应用场景,包括日志收集、事件监控、消息队列以及实时数据管道等。
官方网站:https://kafka.apache.org/
官方文档:https://kafka.apache.org/documentation/
ZooKeeper 简介
ZooKeeper 是一个开源的分布式协调服务,它为分布式应用提供一致性服务,主要用于管理大型分布式系统中的配置信息、命名服务、分布式同步以及提供组服务等,通过其简单的 API 和强大的功能,使得分布式系统中的各个组件能够相互协调、协同工作。
官方网站:https://zookeeper.apache.org/
官方文档:https://zookeeper.apache.org/doc/
华为云 Flexus X 实例部署 Kafka 集群的亮点
灵活配置:通过柔性计算技术,自由调整 CPU、内存资源,匹配 Kafka 需求。
高性能 &可扩展:增强 Kafka 的高吞吐、高可用特性,支持便捷的水平扩展。
无缝集成 &自动化:华为云服务助力无缝集成,支持自动化运维,减少人工干预。
安全可靠:集成华为云安全体系,结合 Kafka 副本机制,确保数据安全和服务可用。
成本效益:智能化运维降低运维成本,提高运维效率。
响应速度:提升业务系统处理实时数据流的响应速度。
业务连续性:故障自动迁移和容错能力,保障业务稳定运行。
促进创新:灵活性和可扩展性支持快速调整,应对市场变化和挑战。
环境规划
本次实验环境中,准备搭建一台 zookeeper 以及三个 Kafka broker 组成的 Kafka Cluster
部署流程
需要了解:
• 采用 docker 方式进行部署 kafka 集群
• 详细购买配置实例可参考文章: 快速部署华为云Flexus X实例,开启您的云端之旅
• 部署 docker 服务请参考文章:华为FlexusX与Docker+Nginx的高效整合之路
拉取镜像
查看并拉取 zookeeper 镜像(镜像尽量拉取官方镜像)
#默认拉取最新版[root@flexusx-251f ~]# docker search zookeeperNAME DESCRIPTION STARS OFFICIALzookeeper Apache ZooKeeper is an open-source server wh… 1452 [OK]bitnamizookeeper Bitnami container image for ZooKeeper 122chainguardzookeeper Minimal image with Apache Zookeeper. 0rapidfortzookeeper RapidFort optimized, hardened image for Zook… 9ubuntuzookeeper ZooKeeper maintains configuration informatio… 13.............................. [root@flexusx-251f ~]# docker pull zookeeperUsing default tag latestlatest Pulling from libraryzookeeperf7ec5a41d630 Already existsfaf4c47c8c61 Pull complete810072571faf Pull completeca2026cde8de Pull complete560b60c59d86 Pull complete48a7bbbfc8eb Pull complete56ff45ef75e6 Pull completee28096689586 Pull completeDigest sha256ecc855e80a6c36a9864e7c1ccc0b68a13595871f88bc8a97e7f2c82a8e9803b2Status Downloaded newer image for zookeeperlatestdocker.iolibraryzookeeperlatest
查看并拉取 kafka 镜像(镜像尽量拉取官方镜像)
[root@flexusx-251f ~]# docker search kafkaNAME DESCRIPTION STARS OFFICIALchainguard/kafka Minimal image with Kafka. 0bitnami/kafka Bitnami container image for Apache Kafka 884ubuntu/kafka Apache Kafka, a distributed event streaming … 51apache/kafka Apache Kafka 63rancher/kafka 2bitnamicharts/kafka .............................. [root@flexusx-251f ~]# docker pull bitnami/kafkaUsing default tag: latestlatest: Pulling from bitnami/kafka2449408de487: Pull completeDigest: sha256:999ba91863ef67e13c5704c3145154d0484671222dab2a603bfdeedc4a9fbad7Status: Downloaded newer image for bitnami/kafka:latestdocker.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.yamlversion: '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 -dWARN[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 psWARN[0000] /kafka/docker-compose.yaml: the attribute `version` is obsolete, it will be ignored, please remove it to avoid potential confusionNAME IMAGE COMMAND SERVICE CREATED STATUS PORTSkafka-kafka1-1 bitnami/kafka:latest "/opt/bitnami/script…" kafka1 7 seconds ago Up 6 seconds 0.0.0.0:9092->9092/tcp, :::9092->9092/tcpkafka-kafka2-1 bitnami/kafka:latest "/opt/bitnami/script…" kafka2 7 seconds ago Up 6 seconds 0.0.0.0:9093->9092/tcp, :::9093->9092/tcpkafka-kafka3-1 bitnami/kafka:latest "/opt/bitnami/script…" kafka3 7 seconds ago Up 6 seconds 0.0.0.0:9094->9092/tcp, :::9094->9092/tcpkafka-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/bashI have no name!@6a5684babfc1:/$ lsbin dev etc lib64 opt run srv usrbitnami docker-entrypoint-initdb.d home media proc run.sh sys varboot entrypoint.sh lib mnt root sbin tmpI 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 topic1Created 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 --listtopic1
修改主题信息
分区数只能增加,不能减少;副本数不支持修改。
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 在高并发、大数据量场景下依然能够稳定运行,提供卓越的服务质量。
值此 828 华为云企业上云节之际,诚邀您一起体验 FlexusX 实例下的 Kafka 集群部署与优化服务。在特惠期间,将享受到前所未有的价格优惠与专业的技术支持,助您轻松构建高效、稳定的实时数据流处理系统。选择华为云 FlexusX 实例,让 Kafka 集群的部署与性能优化变得更加简单、高效。点击下方链接,立即行动,把握 828 特惠,让 Kafka 集群在 FlexusX 实例的强劲动力下,开启数据流处理的新篇章!
产品链接:华为云Flexus云服务器X实例直播建站服务器-华为云
评论