Kafka调研(1):跨数据中心的多集群镜像

调研结果和建议

针对是否可以跨数据中心部署Kafka集群的问题,答案是可行,但是不建议。建议先支持单集群部署,以简化运维成本,支持多地多应用业务上线。

可行性与跨网络部署产生的问题

Kafka实际上并不禁止将Broker部署到不同的网络地域。但是,Kafka的设计是按照单个数据中心进行设计、开发、测试和调优的。从Kafka的官方文档[1]来看,并不推荐将集群跨网络部署。 由于Broker分布在不同的跨地域的网络(WAN), 除了数据同步会极大地增加延迟之外, 并且如果由于网络中断无法保证zk始终可用,带来其他问题,比如:

  1. Partition Leader无法选举。或者由于网络问题,某个Broker频繁掉线导致集群不稳定。
  2. 在Producer推送数据时候,产生延迟(推送到remote Broker)。或者由于网络问题,无法获取ACK。

跨广域网部署Stretch Cluster

部署条件:

  1. 至少具有3个高带宽和低延迟的DC(考虑zookeeper)
  2. 有需要异地容灾和100%恢复的需求
  3. 配置参数min.isr和acks=all。这样就可以要求异地所有的Broker都可以收到,并且确认消息。

带来的复杂度:

  1. 运维的复杂度,以及带来的成本上升
  2. 无法对应Kafka或者应用的故障

多集群架构

有时候需要有场景在不同的地方将数据进行共享或者汇聚。那么可以选择多集群架构。在选择集群的时候需要考虑的一些问题:

  1. 高延迟
  2. 有限的带宽
  3. 高成本 主要来自于多个集群部署的硬件成本、人力成本以及带宽的占用

常见的几种架构[2]

Hub和Spoke架构
双活架构
主备架构

Mirror Maker官方镜像工具

推荐的部署模式[3] 是各地独立部署Kafka cluster, 通过Mirror Maker连接。这种部署的好处在于每个集群是互相独立的。并不互相影响。通过mm连接集群AB之后,可以确保A的数据是B的一个子集,但是两者并不能完全将彼此服务替代。因为Consumer offset两边并不同步。

通过MM连接示意如下:


  1. 1.Kafka Documentation#Datacenter。http://kafka.apache.org/documentation/#datacenters
  2. 2.Kafa权威指南,第8章。
  3. 3.Mirror Maker。https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=27846330