Kafka MirrorMaker实践 - (a != b) ? b : a - ITeye博客

最近准备使用Kafka Mirrormaker做两个数据中心的数据同步,以下是一些要点:

 

  1. mirrormaker必须提供一个或多个consumer配置,一个producer配置,一个whitelist或一个blacklist(支持java正则表达式)
  2. 启动多个mirrormaker进程,单个进程启动多个consuemr streams, 可以提高吞吐量和提高性能
  3. mirrormaker部署在destination datacenter,这样如果kafka集群之间发生网络问题,也不至于从src cluster拿到了数据但发不到dest cluster导致数据丢失
  4. mirrormaker不能防止数据循环发送,即如果使用mm将数据从ClusterA的TopicA复制到ClusterB的TopicA,另一个mm将数据从ClusterB的TopicA复制到ClusterA的TopicA,那么会产生endless loop,mm的负载会急剧上升
  5. mirrormaker的producer和consumer的一些配置的目标是数据不丢失,而不是高性能,它们分别是
  • acks=all(kafka consumer默认1), 意味着数据被拷贝到dest cluster的所有replicas之后才响应
  • retries=max integer(kafka producer默认0)
  • block.on.buffer.full=true(kafka produmer默认false)
  • max.in.flight.requests.per.connection=1(kafka producer默认5), 提升该值可以获得更快的速度,同时意味着如果mirrormaker挂掉,将会丢更多的数据
  • auto.commit.enable=false(默认true)
  • abort.on.send.failure=true(mirrormaker配置)

 

    6. 其他配置:

  • linger.ms=0(kafka producer默认0), 调高linger.ms会使mirrormaker能够将更多的消息打包发送以提升效率,同时意味着消息的平均延迟上升

    7. 可以给所有需要mm的topics设置优先级,优先级高的topic将获得更低的延迟,并且能在更短的时间内重启,重启之后也能更快的追上拷贝进度

你可能感兴趣的:(Kafka MirrorMaker实践 - (a != b) ? b : a - ITeye博客)