首页 > 其他分享 >为什么说Kafka还不是完美的实时数据通道

为什么说Kafka还不是完美的实时数据通道

时间:2024-10-21 12:09:56浏览次数:8  
标签:系统 实时 Kafka 消息 数据通道 schema

 

本文主要谈谈Kafka用于实时数据通道场景的缺陷,以及如何在架构上进行弥补。

Kafka归属于消息队列类产品,其他竞品还有RabbitMQ、RocketMQ等,总的来说它们都是基于生产者、中介和消费者三种角色,提供高并发、大数据量场景下的消息传递。Kafka诞生自Hadoop生态,与生态中的其他组件具有更好的亲和性,在实时数据场景中往往是首选。随着数据实时应用的需求高涨,Kafka作为构建实时数据通道的核心组件,得到了广泛的应用。

Kafka本身不介入消息内容,需要生产者和消费者事先约定某种通讯契约(包括序列化框架和数据结构两部分)来编码和解码消息内容。这个通讯契约由参与双方系统约定而成,双方是对等关系,一旦发生变化需要双方重新协商。

对于消息队列场景,上述机制完全没问题。但在实时数据场景下,数据往往由生产侧CDC工具以抓取数据库的方式产生,那么通讯契约中的数据结构部分直接采用了生产系统的表结构,即由生产侧系统单方面定义的,对下游具有强制性。而且,当生产系统的表结构变化时,下游也不得不适配全表结构的变化,即使只需要部分字段的数据。可见,实时数据场景下,下游系统完全是从属关系,产生了大量冗余工作量。另外,表结构变更传递到下游系统,并没有自动化机制,容易产生时间延迟和沟通误差等问题。

Kafka作为一个实时数据的汇集点,并不能对上述两个问题进行有效控制,也就是本文所说的缺陷。

关于解决方案,首先是在Kafka上增加元数据管理模块,在实践中我们选择了Schema Registry,由confulent开源的元数据管理工具。整体架构如下图所示

 

 

每个topic都有schema,且随着topic中数据结构的变化,schema会产生多个版本,每个版本的schema具有全局唯一id。一条完整的消息就由schema id和data两部分构成,在消费端读取消息时可以根据id找回schema,进而解析消息。

可见,引入SR后系统具备了在Kafka通道中获取上游系统表结构继而解析消息的能力。当表结构发生变化时,CDC工具会自动推送schema给SR。市场上主流的CDC工具,如Oracel Golden Gate(OGG),已经提供了对Schema Registry的适配。

这样,我们解决了schema在上下游之间自动更新同步的问题。

在此基础上,我们又增加了对表结构的裁剪能力,即可以基于不同下游系统的需求对同一个topic进行差异化的读取字段内容。而裁剪后,也就形成了一个上下游对等关系的契约,降低了下游系统的无效耦合,从而消除了冗余工作量。更重要的是,裁剪的过程是零编码的,仅在交互界面上点选操作即可。这个裁剪工具并没有找到开源实现版本,所以我们自己进行了研发,取名为schema manager。

最后,我们基于schema registry和schema manager,开发了自适应的消息解析程序,封装为SDK。这样下游系统只需要按照SDK接口(兼容Kafka原生接口)订阅消息,即可完全屏蔽掉无关的上游变更内容,对上述一套实现机制完全无感。

最后,简单总结下答案,实时数据通道的四个能力:
  • Kafka的消息队列能力
  • 与生产侧打通的schema自动更新和管理能力
  • 面向消费侧需求的schema裁剪能力
  • 自适应schema变更的解析能力
通过这样的实时数据通道,上下游系统恢复到了对等通讯关系,基本清除了下游的冗余工作量。

 

  ​

标签:系统,实时,Kafka,消息,数据通道,schema
From: https://www.cnblogs.com/ivan-uno/p/18489172

相关文章

  • [实时计算flink]动态CEP中规则的JSON格式定义
    本文为您介绍CEP中规则的JSON格式相关信息。目标人群客户风控平台开发人员:对FlinkCEP较熟悉的平台研发人员应能快速学习本格式,并根据自身平台需求判断是否需要进一步封装。客户风控策略人员:只熟悉具体策略但缺乏Java经验的同学,在熟悉CEP概念的基础上,也可快速上手本格式的使......
  • [实时计算flink]数据摄入YAML作业快速入门
    实时计算Flink版基于Flink CDC,通过开发YAML作业的方式有效地实现了将数据从源端同步到目标端的数据摄入工作。本文介绍如何快速构建一个YAML作业将MySQL库中的所有数据同步到StarRocks中。前提条件已创建Flink工作空间,详情请参见开通实时计算Flink版。上下游存储已创建......
  • 基于YOLOv10的农场实时目标检测系统(python+pyside6界面+系统源码+可训练的数据集+也完
    摘要:        基于YOLOv10的农场实时目标检测系统,利用4393张图片(3905张训练集,488张验证集)进行模型训练,最终开发出一个高效的农场目标检测模型。为了方便用户操作和实时检测,本系统还开发了基于Python和PySide6的图形用户界面(GUI),实现了农场目标的实时检测功能。此外,为保......
  • 大数据-180 Elasticsearch - 原理剖析 索引写入与近实时搜索
    点一下关注吧!!!非常感谢!!持续更新!!!目前已经更新到了:Hadoop(已更完)HDFS(已更完)MapReduce(已更完)Hive(已更完)Flume(已更完)Sqoop(已更完)Zookeeper(已更完)HBase(已更完)Redis(已更完)Kafka(已更完)Spark(已更完)Flink(已更完)ClickHouse(已更完)Kudu(已更完)Druid(已更完)Kylin(已更完)Elasticsearch(正在更......
  • kafka
    kafka1.zookeeper集群搭建1.1作用什么是zookeeperzookeeper致力于维护开源服务器,实现高度可靠的分布式协调zookeeper是一个用于维护配置信息,命名,提供分布式服务和提供组服务的集中式服务说白了:zookeeper的作用就是为分布式集群各节点提供数据共享的功能1.2应用场景......
  • 程序员必须了解的消息队列之王-Kafka
    1.Kafka概述1.1定义Kafka是由Apache软件基金会开发的一个开源流处理平台。Kafka是一个分布式的基于发布/订阅模式的消息队列(MessageQueue),主要应用于大数据实时处理领域。1.2消息队列1.2.1传统消息队列的应用场景1.2.2为什么需要消息队列解耦:允许你独立的扩展或......
  • matlab点击实时绘制bezier曲线
    贝塞尔曲线的原理贝塞尔曲线是通过一组控制点定义的参数曲线。曲线不会直接穿过这些点,但这些点会影响曲线的形状。控制点确定了曲线的弯曲程度和方向。贝塞尔曲线的数学公式基于伯恩斯坦多项式(BernsteinPolynomials)。对于一个n次的贝塞尔曲线,它由n+1个控制点​定义。曲线......
  • Linux文件实时自动同步方案(基于inotify) 支持自定义目录、 不限主机数量、支持增删改
    实现细节可以直接跳到第3节3.实现细节关键词:自动同步Linux自动同步 Linux实时同步master同步slave master与slave文件实时同步 目录1.引言背景介绍方案概述方案特点2.技术选型inotifyrsyncShell脚本3.实现细节3.1前置配置1.权限设置2.安装inotify......
  • 实时同步服务
    1实时同步应用场景通过rsync+定时任务实现定时备份/同步对于NFS我们需要进行实时同步2实时同步工具选型实时同步工具特点选型inotify工具+脚本inotify监控指定的目录,监控目录下是否有变化,显示变化了的文件.通过rsync服务端与客户端传送,书写脚本.不......
  • 基于YOLOv8的高精度火车轨道路障检测算法源码源码 + 数据集,数据集共2053张图片,有5个类
     基于YOLOv8的高精度火车轨道路障检测算法源码源码+数据集,数据集共2053张图片,有5个类别,分别是preson、obstic_oc、animal、vehicle、motor_bicycle实时检测:采用YOLOv8m算法,轻量级架构,可以实时识别轨道上的障碍物。高精度识别:精准识别多种路障,包括人、动物、车辆、摩托车。......