本地快速体验
本文中提及的 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
为了能够在本地模拟 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 日志:
此处的 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 上。
在 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