Skip to main content

本地快速体验

info

本文中提及的 AutoMQ Kafka 术语,均特指安托盟丘(杭州)科技有限公司通过 GitHub AutoMQ 组织下开源的 automq-for-kafka 项目。

快速体验将会帮助你在本地机器上启动 AutoMQ for Kafka(简称 AutoMQ Kafka),并简单体验消息的生产、消费,以及 Partition 的快速迁移。如果你想进一步感受 AutoMQ Kafka 的能力,例如分钟级扩缩容能力,欢迎通过 注册 AutoMQ Cloud 免费体验▸ 免费体验。

Docker-Compose

预备条件

其中 AutoMQ Kafka release 包(kafka_2.13-xxx.tgz)用于获取 docker compose 配置文件,并使用其包含的客户端与拉起的 kafka 服务端通信。

基于Docker-Compose 启动

将release包解压,并进入解压后的目录:


tar zxvf kafka_2.13-0.7.0.tgz && cd kafka_2.13-0.7.0

你可以通过配置 docker-compose.yaml 文件启动一个 AutoMQ Kafka 集群。docker/docker-compose.yaml 给出了1台 Controller 角色节点,2台 Broker 角色节点的文件示例。

使用以下命令,启动 AutoMQ Kafka 集群:


docker compose -f docker/docker-compose.yaml up -d

info

为了能够在本地模拟 S3,我们启动了一个 LocalStack 容器模拟S3提供服务;

aws-cli 容器用于在 LocalStack 启动后创建一个 Bucket,创建成功后即退出;

我们启用“10.6.0.0/16”网段供 AutoMQ Kafka 集群使用。如果与你现有的其他 Docker 网络冲突,请修改上述网络配置,例如修改为“10.7.0.0/16”网段,并相应修改 LocalStack 的静态 IP;

我们将两个broker的端口与主机映射,之后你可以在宿主机上通过localhost:9094与broker1通信,通过localhost:9095与broker2通信;

消息的发送

在本节,你将会创建一个名为 quickstart-events 的 Topic,并体验消息的发送。

创建一个名为 quickstart-events,Paritition 数为 1 的 Topic,并生产消息:


# 创建topic
bin/kafka-topics.sh --create --topic quickstart-events --bootstrap-server localhost:9094
# 使用 kafka-console-producer.sh 生产指定的消息
bin/kafka-console-producer.sh --topic quickstart-events --bootstrap-server localhost:9094

你可以输入多行数据,按 CTRL+C 结束。

消息的消费

在本节,你将会体验 AutoMQ Kafka 中消息的消费。

在容器中,继续使用 kafka-console-consumer 消费 quickstart-events 的消息:


bin/kafka-console-consumer.sh --topic quickstart-events --from-beginning --bootstrap-server localhost:9094

你将会看到上一步中你输入的数据。按 CTRL+C 结束消费。

Partition 秒级迁移

在本节中,你将会体验 AutoMQ Kafka 的 Partition 秒级迁移能力。

在 broker1 中,检查 quickstart-events 中 Partition 的分布情况:


bin/kafka-topics.sh --topic quickstart-events --describe --bootstrap-server localhost:9094

你将会看到类似于如下的返回,在本次测试的机器上,quickstart-events-0 由 Node 1 节点负责:

创建如下的迁移计划文件 move.json,将该 quickstart-events-0 迁移到 Node 2 上(如果上一步你看到 quickstart-events-0 由 Node 2 管控,则应该迁移到 Node 1 上):


{
"partitions": [
{
"topic": "quickstart-events",
"partition": 0,
"replicas": [
2
]
}
],
"version": 1
}

执行迁移:


bin/kafka-reassign-partitions.sh --bootstrap-server localhost:9094 --reassignment-json-file move.json --execute

你将会看到类似下图所示的返回:

检查迁移是否成功:


bin/kafka-reassign-partitions.sh --bootstrap-server localhost:9094 --reassignment-json-file move.json --verify

你将会看到类似下图所示的返回:

你可以再次检 quickstart-events Partition 的分布情况:


bin/kafka-topics.sh --topic quickstart-events --describe --bootstrap-server localhost:9094

可以看到 quickstart-events-0 已经由 Node 2 负责:

你可以再次生产和消费以进行进一步验证。

自动重平衡

在本节中,你将体验 AutoMQ Kafka 内置的 Auto Balancer 带来的自动重平衡能力。

AutoMQ Kafka 内置了 Auto Balancer,对 Partition 进行自动重平衡。该机制会检测负载过高或者过低的节点,自动将部分 Partition 迁移到低负载节点上。

要体验自动重平衡能力,先关闭 broker2 容器,之后创建包含10个 Partition 的新 Topic test-topic:


# 关闭 broker2
docker stop broker2
# 创建topic
bin/kafka-topics.sh --create --topic test-topic --partitions 10 --bootstrap-server localhost:9094

注意最后需要传入 broker1 地址

由于 broker2 已经下线,所有** P**artition 将由 broker1 管控。接着,再次启动 broker2:


docker start broker2

利用 kafka-producer-perf-test.sh 进行消息的持续生产:


bin/kafka-producer-perf-test.sh --topic test-topic --num-records=1024000 --throughput 5120 --record-size 1024 --producer-props bootstrap.servers=localhost:9094

一段时间后,Producer侧将抛出 NOT_LEADER_OR_FOLLOWER 的 WARN 日志:

info

此处的 WARN 日志是 Producer 的日志,Producer 侧对于 NOT_LEADER_OR_FOLLOWER 这类场景会进行消息发送的重试,无需担心相关消息漏发送;

其背后就是 Auto Balancer 正在进行迁移。再过一段时间后,Partiton 迁移完毕,生产再次恢复:

调用以下命令,检查 Partition 的分布:


bin/kafka-topics.sh --topic test-topic --describe --bootstrap-server localhost:9094

你将看到类似如下的输出:

可以看到,部分 Partition 已经迁移到了 broker2 上。

info

在 Producer 压测的过程中,你可能会看到多批 NOT_LEADER_OR_FOLLOWER的 WARN 信息。这可能由于 Auto Balancer 产生了多批迁移计划。

你可以在 Controller 容器中通过 grep "Action-MOVE" /opt/kafka/kafka/logs/server.log 查看详细的迁移计划。

基于 Docker-Compose 销毁

使用以下命令,销毁 AutoMQ Kafka 集群:


docker compose -f docker/docker-compose.yaml down -v