AutoMQ集群部署:单机、集群、多区域部署指南
引言
你是否在寻找一种云原生的Kafka解决方案,能够实现10倍成本效益、秒级自动扩展和毫秒级延迟?AutoMQ作为Kafka的云原生分支,通过将存储分离到S3和EBS,为你提供了完美的解决方案。本文将详细介绍AutoMQ的单机部署、集群部署和多区域部署方法,帮助你快速上手并充分利用AutoMQ的优势。读完本文,你将能够根据实际需求选择合适的部署方式,并成功搭建起稳定高效的AutoMQ环境。
AutoMQ的架构设计使其在成本、扩展性和性能方面表现卓越,其核心优势在于将计算与存储分离,从而实现了资源的高效利用和灵活扩展。
部署前准备
在开始部署AutoMQ之前,确保你的环境满足以下要求:
- Java 8+ 环境
- Docker 和 Docker Compose(如需使用Docker部署)
- Git(用于克隆仓库)
首先,克隆AutoMQ仓库:
git clone https://gitcode.com/GitHub_Trending/au/automq.git
cd automq
官方文档:docs/quickstart.html
单机部署
单机部署适用于开发、测试环境或小规模应用。AutoMQ提供了多种单机部署方式,包括传统方式和Docker方式。
传统方式部署
- 生成集群UUID:
KAFKA_CLUSTER_ID="$(bin/kafka-storage.sh random-uuid)"
- 格式化日志目录:
bin/kafka-storage.sh format -t $KAFKA_CLUSTER_ID -c config/kraft/server.properties
- 启动Kafka服务器:
bin/kafka-server-start.sh config/kraft/server.properties
Docker方式部署
使用Docker可以更快速地部署单机AutoMQ:
- 拉取AutoMQ Docker镜像(假设已构建或获取):
docker pull apache/kafka:latest
- 启动容器:
docker run -p 9092:9092 apache/kafka:latest
集群部署
对于生产环境,集群部署是必不可少的。AutoMQ支持多种集群部署模式,包括组合模式和隔离模式。
组合模式集群
在组合模式下,每个节点同时扮演Broker和Controller角色。以下是使用Docker Compose部署3节点集群的示例:
docker-compose.yml 文件内容(docker/examples/jvm/cluster/combined/plaintext/docker-compose.yml):
version: '2'
services:
kafka-1:
image: apache/kafka:latest
hostname: kafka-1
container_name: kafka-1
ports:
- 29092:9092
environment:
KAFKA_NODE_ID: 1
KAFKA_PROCESS_ROLES: 'broker,controller'
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: 'CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT'
KAFKA_CONTROLLER_QUORUM_VOTERS: '1@kafka-1:9093,2@kafka-2:9093,3@kafka-3:9093'
KAFKA_LISTENERS: 'PLAINTEXT://:19092,CONTROLLER://:9093,PLAINTEXT_HOST://:9092'
KAFKA_INTER_BROKER_LISTENER_NAME: 'PLAINTEXT'
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka-1:19092,PLAINTEXT_HOST://localhost:29092
KAFKA_CONTROLLER_LISTENER_NAMES: 'CONTROLLER'
CLUSTER_ID: '4L6g3nShT-eMCtK--X86sw'
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: 0
KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 1
KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1
KAFKA_LOG_DIRS: '/tmp/kraft-combined-logs'
kafka-2:
image: apache/kafka:latest
hostname: kafka-2
container_name: kafka-2
ports:
- 39092:9092
environment:
KAFKA_NODE_ID: 2
KAFKA_PROCESS_ROLES: 'broker,controller'
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: 'CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT'
KAFKA_CONTROLLER_QUORUM_VOTERS: '1@kafka-1:9093,2@kafka-2:9093,3@kafka-3:9093'
KAFKA_LISTENERS: 'PLAINTEXT://:19092,CONTROLLER://:9093,PLAINTEXT_HOST://:9092'
KAFKA_INTER_BROKER_LISTENER_NAME: 'PLAINTEXT'
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka-2:19092,PLAINTEXT_HOST://localhost:39092
KAFKA_CONTROLLER_LISTENER_NAMES: 'CONTROLLER'
CLUSTER_ID: '4L6g3nShT-eMCtK--X86sw'
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: 0
KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 1
KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1
KAFKA_LOG_DIRS: '/tmp/kraft-combined-logs'
kafka-3:
image: apache/kafka:latest
hostname: kafka-3
container_name: kafka-3
ports:
- 49092:9092
environment:
KAFKA_NODE_ID: 3
KAFKA_PROCESS_ROLES: 'broker,controller'
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: 'CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT'
KAFKA_CONTROLLER_QUORUM_VOTERS: '1@kafka-1:9093,2@kafka-2:9093,3@kafka-3:9093'
KAFKA_LISTENERS: 'PLAINTEXT://:19092,CONTROLLER://:9093,PLAINTEXT_HOST://:9092'
KAFKA_INTER_BROKER_LISTENER_NAME: 'PLAINTEXT'
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka-3:19092,PLAINTEXT_HOST://localhost:49092
KAFKA_CONTROLLER_LISTENER_NAMES: 'CONTROLLER'
CLUSTER_ID: '4L6g3nShT-eMCtK--X86sw'
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: 0
KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 1
KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1
KAFKA_LOG_DIRS: '/tmp/kraft-combined-logs'
启动集群:
docker compose -f docker/examples/jvm/cluster/combined/plaintext/docker-compose.yml up
隔离模式集群
隔离模式将Controller和Broker角色分离,提高了系统的稳定性和可维护性。部署示例可参考 docker/examples/jvm/cluster/isolated/plaintext/docker-compose.yml。
多区域部署
多区域部署可以提高系统的可用性和容错能力。AutoMQ通过S3Stream模块实现跨区域数据复制和同步。
多区域部署架构
AutoMQ的多区域部署架构基于S3Stream,利用云存储服务实现跨区域数据共享和同步。
配置多区域部署
-
在每个区域部署AutoMQ集群(参考集群部署部分)。
-
配置S3Stream模块,启用跨区域复制。修改服务器配置文件,添加以下配置:
s3.telemetry.metrics.enable=true
s3.telemetry.metrics.exporter.type=otlp
s3.telemetry.exporter.otlp.endpoint=http://${otlp-collector-endpoint}:4317
- 启动OTel Collector、Prometheus、Grafana等监控服务,实现跨区域监控:
cd docker/telemetry
./install.sh start
监控配置详情:docker/telemetry/README.md
部署验证
部署完成后,进行以下验证步骤确保集群正常运行:
- 创建测试主题:
bin/kafka-topics.sh --create --topic test-topic --bootstrap-server localhost:29092 --partitions 3 --replication-factor 3
- 发送测试消息:
bin/kafka-console-producer.sh --topic test-topic --bootstrap-server localhost:29092
- 消费测试消息:
bin/kafka-console-consumer.sh --topic test-topic --from-beginning --bootstrap-server localhost:29092,localhost:39092,localhost:49092
- 访问Grafana监控面板,检查集群状态:
http://localhost:3000
总结与展望
本文详细介绍了AutoMQ的单机部署、集群部署和多区域部署方法。AutoMQ作为云原生的Kafka分支,通过创新的存储分离架构,为用户提供了更具成本效益、更灵活的流处理解决方案。
未来,AutoMQ将继续优化云原生特性,提供更完善的多区域部署和灾备方案,进一步提升系统的可靠性和性能。
如果你觉得本文对你有帮助,请点赞、收藏并关注我们,获取更多AutoMQ相关的技术文章和最佳实践。下期预告:AutoMQ性能优化指南。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



