专栏首页云计算与大数据Kafka集群间信息复制

Kafka集群间信息复制

导读

Kafka 是最广泛使用的大数据消息分发组件,由于各种原因,大部分 Kafka 的用户都在不同的环境下保有多个集群,而数据整合分析的需求又要求这些集群的数据可以汇聚到一起。于是集群间的数据镜像成为了 Kafka 的一个重要需求。本文将详细描述集群间信息复制的场景和方案。

作者介绍

徐为

腾讯云微服务团队高级解决方案构架师

毕业于欧盟 Erasmus Mundus IMMIT,获得经济和IT管理硕士学位

自2006年以来,曾就职于SonyEricsson、SAP、Alibaba Cloud等多家公司,历任软件开发工程师,数据开发工程师,解决方案架构师

集群复制场景

Kafka 集群复制主要有2个场景,一个是基于地理位置的场景,一个是基于业务生命周期的场景。

  • 基于地理位置的场景

跨国跨地域的公司由于性能,法规等要求,在业务所在地创建了 Kafka 集群对当地的业务数据进行收集和处理。在相应客户需求之外,这部分源数据也是母公司对整个业务线进行分析和考核的重要组成部分,于是把数据以镜像的形式传递回母公司所在的区域也成为了一个非常重要的业务流程。

“分公司数据向母公司汇聚”

  • 基于业务生命周期的场景

另一个场景由业务数据生命周期的属性决定。有些业务比如 IoT 和 V2X,在接入云端时整个 Kafka 集群的任务就是实时的汇聚和分发。很多数据在分发出去之后又被导入到另一个 Topic 继续汇聚和分发。

在业务的高峰时刻,所有的计算资源都被用来处理实时业务。存储介质也倾向更快的读取能力,为了解决开销,存储的大小会被尽量的压缩。而到了业务低峰期,所有的计算资源都可以被拿来处理积攒一天的数据,数据的读取速度不用最大的优化,但是存储量最好足够大,因为有时候夜间需要把之前一周的数据重新跑一遍。这个场景里,性能优化的 Kafka 集群会把数据同步到存储价格最优的 Kafka 集群。

“实时数据集群向线下数据分析集群汇聚”

这2个场景涉及不同可用区(Availability Zone)或者不同地域(Region),但是万变不离其宗,本质上是2个网络互连互通的 Kafka 集群之间的数据镜像处理。

  • 集群复制前提

如果2个或者多个集群想做复制,首先要考虑的是网络互连互通的问题。基于当前腾讯云网络的结构,主要需要考虑 VPC 之间的互连互通逻辑。解决方案都在 VPC 的服务下,一个是云联网,一个是对等链接。

架构示意图如下,取自腾讯云官网:

对等链接是相对较早的 VPC Peering 方案,而云联网是近几年比较火的 SD-WAN 的解决方案,不管哪一种,都可以做到网络互连互通。

集群复制方案

目前集群复制方案有2个,一个叫 MirrorMaker ,一个叫 Confluent Replicator 。MirrorMaker 是相对简单的 stand-alone 工具,针对 Kafka 的2个集群做点对点的复制。而 Replicator 的方案更复杂也支持更多的功能。下面针对两个方案做了一个对比,摘自 MirrorMaker 的官方文档:

具体实施

  • MirrorMaker

1. 创建 Kafka 原集群和目标集群,并确保网络互连互通 – 这里的 Kafka 可以是自建集群也可以是托管版本的 CKafka 集群。

2. 在某一台可以同时连接两个 Kafka 集群的 CVM 上下载 Kafka 的包,然后准备配置文件如下:

# Consumer指向源Kafka集群
$ cat sourceClusterConsumer.config
bootstrap.servers=172.16.0.4:9092  # source server access endpoint
exclude.internal.topics=true
client.id=mirror_maker_consumer
group.id=mirror_maker_consumer
# Producer指向目标Kafka集群
$ cat targetClusterConsumer.config
bootstrap.servers=localhost:9092  # target server access endpoint
acks=1
batch.size=50
client.id=mirror_maker_test_producer

3. 在配置好之后,用下面的命令(需要调整好路径,和需要同步的 topic )来做拉取和向目标写入。

/bin/kafka-mirror-maker.sh --consumer.config ./demo-config/sourceClusterConsumer.config --num.streams 1 --producer.config ./demo-config/targetClusterConsumer.config -whitelist=".*"

4. 在这个命令执行之后,可以在目标的 Kafka 机器跑一个 Consumer 来验证数据。

  • Confluent Replicator

第二个方案从设计角度更加完善,考虑了更多的容错和支持更多的功能。

方案本身和上面的 MirrorMaker 很像:

1. 创建 Kafka 原集群和目标集群,并确保网络互连互通 – 这里的 Kafka 可以是自建集群也可以是托管版本的CKafka集群

2. 在某一台可以同时连接2个 Kafka 集群的 CVM 上下载 Kafka 的包,然后准备配置文件如下

3. 用下面的命令来(需要调整好路径,和需要同步的 topic )来做拉取和向目标写入

./bin/replicator --cluster.id replicator --consumer.config my-examples/consumer.properties --producer.config my-examples/producer.properties --replication.config my-examples/replication.properties --whitelist 'test-topic'

其中两个额外的参数:

--cluster.id - An identifier used to determine which Replicator cluster this executable should join. Multiple Replicator executable instances with the same cluster.id will work together. Replicator是以多个instance来复制的逻辑,只要cluster Id一样的,就可以协同工作。
--replication.config - The path to a file containing any non connection specific configuration. Command line arguments will override these configurations. 其他的和连接无关的参数配置。

具体的配置可以参考 :

https://docs.confluent.io/platform/current/multi-dc-deployments/replicator/replicator-run.html#replicator-executable-command-line-parameters

4. 在这个命令执行之后,可以在目标的 Kafka 机器跑一个 Consumer 来验证数据。

参考文档

云联网:

https://cloud.tencent.com/document/product/877/18675

对等链接:

https://cloud.tencent.com/document/product/553

MirrorMaker 官方文档:

https://docs.confluent.io/4.0.0/multi-dc/mirrormaker.html

CKafka集群:

https://cloud.tencent.com/product/ckafka

https://dzone.com/articles/how-to-use-mirrormaker-with-apache-kafka-clusters

https://docs.confluent.io/platform/current/multi-dc-deployments/replicator/replicator-quickstart.html

本文分享自微信公众号 - 黑洞日志(heidcloud)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-08-12

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 独家分享:Kafka集群间信息复制攻略来了!

    自2006年以来,曾就职于SonyEricsson、SAP等多家公司,历任软件开发工程师,数据开发工程师,解决方案架构师

    腾讯云中间件团队
  • Kafka运维篇之使用SMM监控Kafka集群复制

    继之前《Kafka运维篇之初识Streams Messaging Manager》、《Kafka运维篇之使用SMM监控Kafka集群》和《Kafka运维篇之使用...

    大数据杂货铺
  • 使用多数据中心部署来应对Kafka灾难恢复(一)使用多数据中心部署来应对灾难恢复

    数据中心宕机和数据丢失能导致企业损失很多收入或者完全停摆。为了将由于事故导致的宕机和数据丢失带来的损失最小化,企业需要制定业务可持续性计划和灾难恢复策略。

    扫帚的影子
  • 使用多数据中心部署来应对Kafka灾难恢复(二)

    Confluent Replicator是一个Kafka connector,它运行在Kafka Connect框架内。Replicator继承了所有Kafka...

    扫帚的影子
  • LinkedIn —— Apache Kafka 的伸缩扩展能力

    什么是Kafka? Apache Kafka是一个演进的发布/订阅消息系统。系统结合队列和消息机制,可把它当成在一群服务器间进行的日志提交过程。消息被分成...

    小小科
  • 如何为Kafka集群选择合适的Topic/Partitions数量

    首先要明白,在kafka中,单个partition是kafka并行操作的最小单元,在producter和broker端,向每一个分区写入数据是完全可以并行的,此...

    大数据真好玩
  • FAQ系列之Kafka

    “流媒体”:发布者(“生产者”)经常发送的大量消息(想想数万或数十万)。许多订阅者(“消费者”)经常进行消息轮询。

    大数据杂货铺
  • 如何为Kafka集群选择合适的Topics/Partitions数量

      这是许多kafka使用者经常会问到的一个问题。本文的目的是介绍与本问题相关的一些重要决策因素,并提供一些简单的计算公式。

    zhisheng
  • 01 . 消息队列之(Kafka+ZooKeeper)

    Kafka最核心的最成熟的还是他的消息引擎,所以Kafka大部分应用场景还是用来作为消息队列削峰平谷。另外,Kafka也是目前性能最好的消息中间件。

    常见_youmen
  • 如何为Kafka集群确定合适的分区数以及分区数过多带来的弊端

    通过之前的文章《Kafka分区分配策略》和《Kafka高性能揭秘》,我们了解到:Kafka高吞吐量的原因之一就是通过partition将topic中的消息保存到...

    大数据学习与分享
  • Cloudera Streams Management正式GA

    上个月Cloudera发布Cloudera Stream Processing,这个解决方案让所有Cloudera客户都能获得最新的,安全版本的Apache K...

    Fayson
  • 消息中心篇之RocketMq与Kafka选型

    前两篇分别总结了Kafka和RocketMq相关的面试题,从今天开始,我们一起再回过头来,重新梳理一下这两个知名度超高的消息中间件的不同之处,相信本系列文章,会...

    Bug开发工程师
  • 08 Confluent_Kafka权威指南 第八章:跨集群数据镜像

    本书大部分内容都在讨论单个kafka集群的配置、维护和使用。但是,在一些场景中,可能需要多集群架构。 在某些情况下,集群是完全分离的,他们属于不同部门的不同实...

    冬天里的懒猫
  • 14个最常见的Kafka面试题及答案

    Java高级架构
  • 【Kafka】消息订阅框架Kafka

    版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/gon...

    魏晓蕾
  • Kafka概念入门(一)

      比如,有100条有序数据,生产者发送到kafka集群,kafka的分片有4个,可能的情况就是一个分片保存0-25,一个保存25-50......这样消息在k...

    intsmaze-刘洋
  • RocketMQ 的基础概念和架构-RocketMQ知识体系1

    前面几篇文章分享了kafka 相关的实现逻辑,kafka在大吞吐量方面有较好的表现,但是有时候我们需要实现比较复杂的业务逻辑从而对于吞吐量方面要求不是太高,这个...

    DougWang
  • 跟我学Kafka之zookeeper的存储结构

    当我们kafka启动运行以后,就会在zookeeper上初始化kafka相关数据,主要包括六大类:

    小程故事多
  • 【Kafka专栏】-Kafka从初始到搭建到应用

    同一topic内部的消息按照一定的key和算法被分区(partition)存储在不同的Broker上。

    LhWorld哥陪你聊算法

扫码关注云+社区

领取腾讯云代金券