写点什么

华为云 FlexusX 实例下的 Kafka 集群部署实践与性能优化

作者:轶天下事
  • 2025-01-06
    海南
  • 本文字数:7903 字

    阅读完需:约 26 分钟

前言

华为云 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实例直播建站服务器-华为云


 

用户头像

轶天下事

关注

还未添加个人签名 2022-07-30 加入

还未添加个人简介

评论

发布
暂无评论
华为云FlexusX实例下的Kafka集群部署实践与性能优化_轶天下事_InfoQ写作社区