Kafka调研(1):跨数据中心的多集群镜像
调研结果和建议
针对是否可以跨数据中心部署Kafka集群的问题,答案是可行,但是不建议。建议先支持单集群部署,以简化运维成本,支持多地多应用业务上线。
可行性与跨网络部署产生的问题
Kafka实际上并不禁止将Broker部署到不同的网络地域。但是,Kafka的设计是按照单个数据中心进行设计、开发、测试和调优的。从Kafka的官方文档[1]来看,并不推荐将集群跨网络部署。 由于Broker分布在不同的跨地域的网络(WAN), 除了数据同步会极大地增加延迟之外, 并且如果由于网络中断无法保证zk始终可用,带来其他问题,比如:
- Partition Leader无法选举。或者由于网络问题,某个Broker频繁掉线导致集群不稳定。
- 在Producer推送数据时候,产生延迟(推送到remote Broker)。或者由于网络问题,无法获取ACK。
跨广域网部署Stretch Cluster
部署条件:
- 至少具有3个高带宽和低延迟的DC(考虑zookeeper)
- 有需要异地容灾和100%恢复的需求
- 配置参数min.isr和acks=all。这样就可以要求异地所有的Broker都可以收到,并且确认消息。
带来的复杂度:
- 运维的复杂度,以及带来的成本上升
- 无法对应Kafka或者应用的故障
多集群架构
有时候需要有场景在不同的地方将数据进行共享或者汇聚。那么可以选择多集群架构。在选择集群的时候需要考虑的一些问题:
- 高延迟
- 有限的带宽
- 高成本 主要来自于多个集群部署的硬件成本、人力成本以及带宽的占用
常见的几种架构[2]
Hub和Spoke架构
双活架构
主备架构
Mirror Maker官方镜像工具
推荐的部署模式[3] 是各地独立部署Kafka cluster, 通过Mirror Maker连接。这种部署的好处在于每个集群是互相独立的。并不互相影响。通过mm连接集群AB之后,可以确保A的数据是B的一个子集,但是两者并不能完全将彼此服务替代。因为Consumer offset两边并不同步。
通过MM连接示意如下: