Kafka Streams与其他流处理平台的差异在哪里?

实时流处理架构实战:Flink与Kafka Streams技术选型与落地 Flink 和 Kafka Streams 不是竞品,是不同场景的最优解。小团队、Kafka 中心化架构选 KStreams;大规模、多数据源、复杂计算选 Flink。Kappa 架构是未来。不要再搭 Lambda 架构了,维护两套代码的代价远高于你的想象。Exactly-Once 不是银弹。90% 的场景用 At-Least-Once + 幂等就够了,别给自己找麻烦。状态管理是第一优先级。无论选哪个,先把 TTL 设好,把状态膨胀扼杀在摇篮里。 阅读详情

本文已收录GitHub,更有互联网大厂面试真题,面试攻略,高效学习资料等

近些年来,开源流处理领域涌现出了很多优秀框架。光是在 Apache 基金会孵化的项目,关于流处理的大数据框架就有十几个之多,比如早期的 Apache Samza、ApacheStorm,以及这两年火爆的 Spark 以及 Flink 等。

应该说,每个框架都有自己独特的地方,也都有自己的缺陷。面对这众多的流处理框架,我们应该如何选择呢?在本文汇总,我就来梳理几个主流的流处理平台,并重点分析一下 KafkaStreams 与其他流处理平台的差异。

什么是流处理平台?

首先,我们有必要了解一下流处理平台的概念。“Streaming Systems”一书是这么定义“流处理平台”的:流处理平台(Streaming System)是处理无限数据集(Unbounded Dataset)的数据处理引擎,而流处理是与批处理(Batch Processing)相对应的。

所谓的无限数据,是指数据永远没有尽头。流处理平台是专门处理这种数据集的系统或框架。当然,这并不是说批处理系统不能处理这种无限数据集,只是通常情况下,它更擅长处理有限数据集(Bounded Dataset)。

那流处理和批处理究竟该如何区分呢?下面这张图应该能帮助你快速且直观地理解它们的区别。

好了,现在我来详细解释一下流处理和批处理的区别。

长期以来,流处理给人的印象通常是低延时,但是结果不准确。每来一条消息,它就能计算一次结果,但由于它处理的大多是无界数据,可能永远也不会结束,因此在流处理中,我们很难精确描述结果何时是精确的。理论上,流处理的计算结果会不断地逼近精确结果。

但是,它的竞争对手批处理则正好相反。批处理能提供准确的计算结果,但往往延时很高。

因此,业界的大神们扬长避短,将两者结合在一起使用。一方面,利用流处理快速地给出不那么精确的结果;另一方面,依托于批处理,最终实现数据一致性。这就是所谓的Lambda 架构。

延时低是个很好的特性,但如果计算结果不准确,流处理是无法完全替代批处理的。所谓计算结果准确,在教科书或文献中有个专属的名字,叫正确性(Correctness)。可以这么说,目前难以实现正确性是流处理取代批处理的最大障碍,而实现正确性的基石是精确一次处理语义(Exactly Once Semantics,EOS)。

这里的精确一次是流处理平台能提供的一类一致性保障。常见的一致性保障有三类:

  • 至多一次(At most once)语义:消息或事件对应用状态的影响最多只有一次。
  • 至少一次(At least once)语义:消息或事件对应用状态的影响最少一次。
  • 精确一次(Exactly once)语义:消息或事件对应用状态的影响有且只有一次。

注意,我这里说的都是对应用状态的影响。对于很多有副作用(Side Effect)的操作而言,实现精确一次语义几乎是不可能的。举个例子,假设流处理中的某个步骤是发送邮件操作,当邮件发送出去后,倘若后面出现问题要回滚整个流处理流程,已发送的邮件是没法追回的,这就是所谓的副作用。当你的流处理逻辑中存在包含副作用的操作算子时,该操作算子的执行是无法保证精确一次处理的。因此,我们通常只是保证这类操作对应用状态的影响精确一次罢了。后面我们会重点讨论 Kafka Streams 是如何实现 EOS 的。

本文讨论的流处理既包含真正的实时流处理,也包含微批化(Microbatch)的流处理。所谓的微批化,其实就是重复地执行批处理引擎来实现对无限数据集的处理。典型的微批化实现平台就是Spark Streaming。

Kafka Streams的特色

相比于其他流处理平台,Kafka Streams 最大的特色就是它不是一个平台,至少它不是一个具备完整功能(Full-Fledged)的平台,比如其他框架中自带的调度器和资源管理器,就是 Kafka Streams 不提供的。

Kafka 官网明确定义 Kafka Streams 是一个Java 客户端库(Client Library)。你可以使用这个库来构建高伸缩性、高弹性、高容错性的分布式应用以及微服务。

使用 Kafka Streams API 构建的应用就是一个普通的 Java 应用程序。你可以选择任何熟悉的技术或框架对其进行编译、打包、部署和上线。

在我看来,这是 Kafka Streams 与 Storm、Spark Streaming 或 Flink 最大的区别。

Java 客户端库的定位既可以说是特色,也可以说是一个缺陷。目前 Kafka Streams 在国内推广缓慢的一个重要原因也在于此。毕竟,很多公司希望它是一个功能完备的平台,既能提供流处理应用 API,也能提供集群资源管理与调度方面的能力。所以,这个定位到底是特色还是缺陷,仁者见仁、智者见智吧。

Kafka Streams与其他框架的差异

接下来,我从应用部署、上下游数据源、协调方式和消息语义保障(SemanticGuarantees)4 个方面,详细分析一下 Kafka Streams 与其他框架的差异。

应用部署

首先,我们从流处理应用部署方式上对 Kafka Streams 及其他框架进行区分。

我们刚刚提到过,Kafka Streams 应用需要开发人员自行打包和部署,你甚至可以将Kafka Streams 应用嵌入到其他 Java 应用中。因此,作为开发者的你,除了要开发代码之外,还要自行管理 Kafka Streams 应用的生命周期,要么将其打包成独立的 jar 包单独运行,要么将流处理逻辑嵌入到微服务中,开放给其他服务调用。

但不论是哪种部署方式,你需要自己处理,不要指望 Kafka Streams 帮你做这些事情。

相反地,其他流处理平台则提供了完整的部署方案。我以 Apache Flink 为例来解释一下。在 Flink 中,流处理应用会被建模成单个的流处理计算逻辑,并封装进 Flink 的作业中。类似地,Spark 中也有作业的概念,而在 Storm 中则叫拓扑(Topology)。作业的生命周期由框架来管理,特别是在 Flink 中,Flink 框架自行负责管理作业,包括作业的部署和更新等。这些都无需应用开发人员干预。

另外,Flink 这类框架都存在资源管理器(Resource Manager)的角色。一个作业所需的资源完全由框架层的资源管理器来支持。常见的资源管理器,如 YARN、Kubernetes、Mesos 等,比较新的流处理框架(如 Spark、Flink 等)都是支持的。像 Spark 和 Flink这样的框架,也支持 Standalone 集群的方式,即不借助于任何已有的资源管理器,完全由集群自己来管理资源。这些都是 Kafka Streams 无法提供的。

因此,从应用部署方面来看,Kafka Streams 更倾向于将部署交给开发人员来做,而不是依赖于框架自己实现。

上下游数据源

谈完了部署方式的差异,我们来说说连接上下游数据源方面的差异。简单来说,KafkaStreams 目前只支持从 Kafka 读数据以及向 Kafka 写数据。在没有 Kafka Connect 组件的支持下,Kafka Streams 只能读取 Kafka 集群上的主题数据,在完成流处理逻辑后也只能将结果写回到 Kafka 主题上。

反观 Spark Streaming 和 Flink 这类框架,它们都集成了丰富的上下游数据源连接器(Connector),比如常见的连接器 MySQL、ElasticSearch、HBase、HDFS、Kafka等。如果使用这些框架,你可以很方便地集成这些外部框架,无需二次开发。

当然,由于开发 Connector 通常需要同时掌握流处理框架和外部框架,因此在实际使用过程中,Connector 的质量参差不齐,在具体使用的时候,你可以多查查对应的jira 官网,看看有没有明显的“坑”,然后再决定是否使用。

在这个方面,我是有前车之鉴的。曾经,我使用过一个 Connector,我发现它在读取Kafka 消息向其他系统写入的时候似乎总是重复消费。费了很多周折之后,我才发现这是一个已知的 Bug,而且早就被记录在 jira 官网上了。因此,我推荐你多逛下 jira,也许能提前避开一些“坑”。

总之,目前 Kafka Streams 只支持与 Kafka 集群进行交互,它没有提供开箱即用的外部数据源连接器。

协调方式

在分布式协调方面,Kafka Streams 应用依赖于 Kafka 集群提供的协调功能,来提供高容错性和高伸缩性。

Kafka Streams 应用底层使用了消费者组机制来实现任意的流处理扩缩容。应用的每个实例或节点,本质上都是相同消费者组下的独立消费者,彼此互不影响。它们之间的协调工作,由 Kafka 集群 Broker 上对应的协调者组件来完成。当有实例增加或退出时,协调者自动感知并重新分配负载。

我画了一张图来展示每个 Kafka Streams 实例内部的构造,从这张图中,我们可以看出,每个实例都由一个消费者实例、特定的流处理逻辑,以及一个生产者实例组成,而这些实例中的消费者实例,共同构成了一个消费者组。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-U8Mp6hQj-1594038457993)(https://upload-images.jianshu.io/upload_images/21105806-985dfd7e3758d83d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]

通过这个机制,Kafka Streams 应用同时实现了高伸缩性和高容错性,而这一切都是自动提供的,不需要你手动实现。

而像 Flink 这样的框架,它的容错性和扩展性是通过专属的主节点(Master Node)全局来协调控制的。

Flink 支持通过 ZooKeeper 实现主节点的高可用性,避免单点失效:某个节点出现故障会自动触发恢复操作。这种全局性协调模型对于流处理中的作业而言非常实用,但不太适配单独的流处理应用程序。原因就在于它不像 Kafka Streams 那样轻量级,应用程序必须要实现特定的 API 来开启检查点机制(checkpointing),同时还需要亲身参与到错误恢复的过程中。

应该这样说,在不同的场景下,Kafka Streams 和 Flink 这种重量级的协调模型各有优劣。

消息语义保障

我们刚刚提到过 EOS,目前很多流处理框架都宣称它们实现了 EOS,也包括 KafkaStreams 本身。关于精确一次处理语义,有一些地方需要澄清一下。

实际上,当把 Spark、Flink 与 Kafka 结合使用时,如果不使用 Kafka 在 0.11.0.0 版本引入的幂等性 Producer 和事务型 Producer,这些框架是无法实现端到端的 EOS 的。

因为这些框架与 Kafka 是相互独立的,彼此之间没有任何语义保障机制。但如果使用了事务机制,情况就不同了。这些外部系统利用 Kafka 的事务机制,保障了消息从 Kafka 读取到计算再到写入 Kafka 的全流程 EOS。这就是所谓的端到端精确一次处理语义。

之前 Spark 和 Flink 宣称的 EOS 都是在各自的框架内实现的,无法实现端到端的 EOS。只有使用了 Kafka 的事务机制,它们对应的 Connector 才有可能支持端到端精确一次处理语义。

Spark 官网上明确指出了用户若要实现与 Kafka 的 EOS,必须自己确保幂等输出和位移保存在同一个事务中。如果你不能自己实现这套机制,那么就要依赖于 Kafka 提供的事务机制来保证。

而 Flink 在 Kafka 0.11 之前也宣称提供 EOS,不过是有前提条件的,即每条消息对Flink应用状态的影响有且只有一次。

举个例子,如果你使用 Flink 从 Kafka 读取消息,然后不加任何处理直接写入到 MySQL,那么这个操作就是无状态的,此时 Flink 无法保证端到端的 EOS。

换句话说,Flink 最后写入到 MySQL 的 Kafka 消息可能有重复的。当然,Flink 社区自 1.4版本起正式实现了端到端的 EOS,其基本设计思想正是基于 Kafka 0.11 幂等性 Producer的两阶段提交机制。

两阶段提交(2-Phase Commit,2PC)机制是一种分布式事务机制,用于实现分布式系统上跨多个节点事务的原子性提交。下面这张图来自于神书“Designing Data-IntensiveApplications”中关于 2PC 讲解的章节。它清晰地描述了一次成功 2PC 的过程。在这张图中,两个数据库参与到分布式事务的提交过程中,它们各自做了一些变更,现在需要使用2PC 来保证两个数据库的变更被原子性地提交。如图所示,2PC 被分为两个阶段:Prepare 阶段和 Commit 阶段。只有完整地执行了这两个阶段,这个分布式事务才算是提交成功。

分布式系统中的 2PC 常见于数据库内部实现或以 XA 事务的方式供各种异质系统使用。Kafka 也借鉴了 2PC 的思想,在 Kafka 内部实现了基于 2PC 的事务机制。

但是,对于 Kafka Streams 而言,情况就不同了。它天然支持端到端的 EOS,因为它本来就是和 Kafka 紧密相连的。

下图展示了一个典型的 Kafka Streams 应用的执行逻辑。

通常情况下,一个 Kafka Streams 需要执行 5 个步骤:

  1. 读取最新处理的消息位移;
  2. 读取消息数据;
  3. 执行处理逻辑;
  4. 将处理结果写回到 Kafka;
  5. 保存位置信息。

这五步的执行必须是原子性的,否则无法实现精确一次处理语义。

在设计上,Kafka Streams 在底层大量使用 Kafka 事务机制和幂等性 Producer 来实现多分区的原子性写入,又因为它只能读写 Kafka,因此 Kafka Streams 很容易地就实现了端到端的 EOS。

总之,虽然 Flink 自 1.4 版本也提供与 Kafka 的 EOS,但从适配性来考量的话,应该说Kafka Streams 与 Kafka 的适配性是最好的。

总结

好了,我们来小结一下。本文重点分享了 Kafka Streams 与其他流处理框架或平台的差异。总的来说,Kafka Streams 是一个轻量级的客户端库,而其他流处理平台都是功能完备的流处理解决方案。这是 Kafka Streams 的特色所在,但同时可能也是缺陷。不过,我认为很多情况下我们并不需要重量级的流处理解决方案,采用轻量级的库 API 帮助我们实现实时计算是很方便的情形,我想,这或许是 Kafka Streams 未来的破局之路吧。

Confluent Platform vs 原生Kafka:功能增强与架构选择全解析 本文深度解析Confluent Platform与原生Kafka在技术架构、功能增强及部署选择上的关键差异。通过对比核心组件、运维监控、数据集成生态和流处理能力,帮助企业根据实际需求选择适合的流数据平台方案,特别适合需要企业级SLA保障或混合部署场景的技术决策者。 阅读详情

相关推荐

Kafka不是消息队列:事件流架构的核心原理与工程实践

Apache Kafka 本质是一种面向事件流(Event Streaming)的分布式日志系统,其核心原理基于仅追加日志(append-only log)、分区(partition)强序、副本同步(ISR)与消费者组(consumer group)状态自治。它不解决瞬时消息传递,而是保障事件的持久化、可重放、严格有序与端到端精确一次处理,从而支撑实时数仓、事件溯源、CDC 数据同步和IoT海量时序数据等高要求场景。区别于RabbitMQ或Redis Pub/Sub等传统消息中间件,Kafka将事件视为系统

weixin_29057237的博客 288

Apache Storm: 分布式流处理平台

1.背景介绍 分布式流处理是一种处理大规模、实时数据流的方法,它在各种应用场景中发挥着重要作用,例如实时数据分析、大数据处理、物联网、人工智能等。随着数据量的增加和实时性的要求越来越高,传统的批处理技术已经无法满足这些需求。因此,分布式流处理技术成为了一种必须关注的技术。 Apache Storm是一个开源的分布式流处理平台,它可以实时处理大量数据,并提供高吞吐量和低延迟。它由Netflix公...

AI天才研究院 1227

实时流计算平台架构:Apache Flink vs Kafka Streams选型分析

在数字化转型的浪潮中,实时数据处理已经成为企业核心竞争力的重要组成部分。无论是金融风控、推荐系统、物联网监控,还是实时营销,都离不开高效的流计算平台。

TechVision大咖圈聚合全球科技大咖,洞察AI、云计算、大数据等前沿趋势,为企业决策者提供智见未来的转型路径。 1301

分布式流处理平台(Apache Kafka)

Apache Kafka:分布式流处理平台,可用于实时数据集成和流数据处理。支持高吞吐量的数据传输和处理,适用于实时数据分析和事件驱动架构。最初由LinkedIn开发并开源,于2011年开始投入使用,后来成为Apache软件基金会的一个顶级项目。其设计初衷是为了满足LinkedIn公司内部对大规模实时数据处理和传输的需求。

weixin_43156294的博客 1493

【3】流处理平台设计与实践

作者:禅与计算机程序设计艺术 1.简介 1.1 概念阐述 流处理(Streaming Processing)作为一种新的计算模型,在互联网、移动互联网等新兴的互联网领域得到了广泛应用。流处理是指对持续性数据流进行高效处理,如数据采集、计算分析、实时监控、事件响

AI天才研究院 2090

深入理解卡夫卡(Kafka):分布式流处理平台的使用教程

Apache Kafka是一个分布式流处理平台,旨在以高吞吐量、可持久化、可水平扩展的方式处理大量数据。它最常用于两大场景:构建实时数据管道以及构建实时数据流应用程序。Kafka利用主题来组织数据,并通过分区概念实现负载均衡和并行处理,从而在保证数据不丢失的情况下,提供快速的数据读写。Kafka使用一种简化的发布/订阅模型,其中消息由发布者(生产者)发送到topic,订阅者(消费者)可以订阅一个或多个topic以接收消息。此模型的特点包括消息持久化、容错性、高吞吐量和可扩展性。

weixin_28999139的博客 1355

2021大厂Java面试真题(Kafka )

2021大厂Java面试真题(Kafka ) 1、Kafka 是什么?主要应用场景有哪些? Kafka 是一个分布式流式处理平台。 流平台具有三个关键功能:  消息队列:发布和订阅消息流,这个功能类似于消息队列,这也是 Kafka 也被归类为消 息队列的原因。  容错的持久方式存储记录消息流: Kafka 会把消息持久化到磁盘,有效避免了消息丢失 的风险。  流式处理平台: 在消息发布的时候进行处理,Kafka 提供了一个完整的流式处理类库。 Kafka 主要有两大应用场景:  消息队列 :建立实时

ZJC'博客 1579

[CARLA系列--01]CARLA 0.9.15 在Windows下的安装教程(一)

Carla是一款开源的自动驾驶仿真器,它基本可以用来帮助训练自动驾驶的所有模块,包括感知系统,Localization, 规划系统等等.Carla这个产品目前已经更新到了最新的0.9.15版本,目前遇到好多人在windows系统上如何安装可编辑版的Carla遇到了好多问题,所以针对在windows上的安装,推出此列教程.

汽车ECU自动化测试 4651

40 | Kafka Streams与其他流处理平台的差异在哪里?

首先,我们有必要了解一下流处理平台的概念。流处理平台(Streaming System)是处理无限数据集(Unbounded Dataset)的数据处理引擎,而流处理是与批处理(Batch Processing)相对应的。所谓的无限数据,是指数据永远没有尽头。流处理平台是专门处理这种数据集的系统或框架。当然,这并不是说批处理系统不能处理这种无限数据集,只是通常情况下,它更擅长处理有限数据集(Bounded Dataset)。那流处理和批处理究竟该如何区分呢?

qq_37756660的博客 1163

【计算机三级-数据库技术】操作题大题(第1套)

从触发器的语法中可知,【1】处应该填写的是执行触发器的表,【2】处应该填写指定在表或视图上执行哪些数据修改语句时将激活触发器的关键字。使用FOR或AFTER选顶定义的触发器为后触发器,即只有在引发触发器执行的语句中的操作都已成功执行,并且所有的约束检查也成功完成后,才执行触发器。转换成新的独立的模式,模式的属性由联系本身的属性及两个实体的键构成,主键由两端实体的键组合而成。实体的转换:在从ER图转换为关系模式时,一个实体转换成一个关系模式,实体的属性就是关系模式的属性,实体的键就是关系的主键。

放纵小开爱的博客 1101

STM32F411CEU6实战:用W25Q64存储多张图片,在240x240 LCD上轮播显示(附源码)

本文详细介绍了如何使用STM32F411CEU6通过SPI接口管理W25Q64 Flash中的多张图片,并在240x240 LCD上实现平滑轮播显示。内容涵盖硬件配置、图片存储方案设计、轮播系统实现及性能优化技巧,特别针对SPI传输优化和多图存储管理提供了实用解决方案。附源码,适合嵌入式开发者参考。

weixin_32025789的博客 308

Apache Pulsar 与 Kafka Streams

是一个由 Apache Software Foundation 开源的分布式消息流平台,提供多租户、高性能的发布-订阅消息系统。Pulsar 主要用于实时数据的传输和消息队列处理,它支持水平扩展、数据持久化、多租户、消息存储分层以及跨地域复制等特性。是 Apache Kafka 提供的一个用于构建实时数据流处理应用的流处理库。Kafka Streams 使开发者能够轻松构建具备高可扩展性和容错能力的数据处理应用,无需借助额外的处理引擎或框架。

Flying_Fish_roe的博客 1258

星空组网 vs 蒲公英 vs Tailscale:2024年国内免费异地组网工具横评(含实测数据)

本文对2024年国内主流免费异地组网工具星空组网、蒲公英和Tailscale进行了深度横向评测。基于实测数据,重点分析了三者在P2P成功率、中继延迟、传输速度及稳定性方面的表现,为中小企业、远程办公及个人开发者提供了清晰的选择指南。星空组网在国内网络环境下展现出优秀的平衡性。

weixin_29217235的博客 1439

高级Kafka应用之流处理

教科书中关于水位的经典定义通常是这样的:在时刻T,任意创建时间(Event Time)为T’,且T’≤T的所有事件都已经到达或被观测到,那么T就被定义为水位。“Streaming System”一书则是这样表述水位的:水位是一个单调增加且表征最早未完成工作(oldest work not yet completed)的时间戳。为了帮助你更好地理解水位,我借助这本书里的一张图来说明一下。

小小博客 1131

Python 爬虫实战:亚马逊 + eBay 商品信息跨平台抓取(价格 / 销量 / 评价对比)

亚马逊和 eBay 是全球知名的电商平台,拥有海量的商品信息。对于消费者来说,比较不同平台上的商品价格、销量和用户评价可以帮助他们找到性价比最高的商品。对于商家而言,了解竞争对手的商品信息有助于优化自身的产品策略和定价策略。然而,手动在两个平台上逐一比较商品信息是非常耗时且低效的。因此,开发一个能够自动抓取并对比这两个平台商品信息的爬虫工具具有重要的实际意义。

yansideyucsdn的博客 617

从零开始创建Davinci Configurator配置工程

本文介绍了从零开始搭建达芬奇工程的详细步骤。首先安装Vector的CBD包后,通过DavicCFG.exe新建空白ECU工程。文章提到Postbuild相关概念可参考往期文章《AUTOSAR配置中的PostBuild、Precompile、Linktime》,并预告下期将讲解如何通过导入DBC文件来启用AUTOSAR模块。全文以实操截图为主,步骤清晰简明,适合开发者参考备份。

Xiaowestwind的博客 219

Kafka 常见问题 | Apache Kafka 官方学习文档

本文基于 Confluent 官方 Kafka 常见问题解答文档(https://docs.confluent.io/kafka/faq.html#how-do-i-get-started-with-ak)整理,涵盖Kafka核心定义、工作原理、核心概念、优势及快速上手方式,是Kafka入门的核心参考内容。

寓教于乐。教己助人 739

从0开始图形学(光栅化)

从0开始图形学

A112459的专栏 2395

Flink 生态与选型:实时之刃该往哪挥

Flink 与 Kafka 是搭档不是对手:一个是计算引擎、一个是消息平台;「Kafka 不能做计算」是错误说法(它有 Kafka Streams),准确的分工是「轻量库 vs 独立引擎、总线 vs 加工厂」;Flink 与 Spark 的根差异是执行模型:逐条流水线 vs 微批;官方数字——Spark 微批低至 100ms(精确一次)、连续模式低至 1ms(仅至少一次),Flink 在亚秒级场景同时保住低延迟与精确一次;选型看场景:亚秒级实时 → Flink;大规模离线/ML → Spark;

bill的博客 169

工业仪表读数识别:YOLO目标检测 + OCR混合方案实战

仪表整体(meter):粗定位整只仪表,用于快速裁剪、排除背景干扰表盘区域(dial):精确的圆形/方形表盘区域,用于后续矫正和读数数字区域(display)/指针(pointer):数显表定位数码管区域,指针表可辅助定位指针为什么要分三级?因为现场仪表安装角度、距离、光照差异极大。先粗检再精检,比一步到位的准确率高很多,也方便后续做透视变换。工业仪表读数识别,技术路线的选择比算法精度更重要。选对了路线,事半功倍;选错了,怎么调都达不到验收标准。几条落地建议:指针表优先传统算法。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 95

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

工业数据采集实战:协议异构与边缘计算架构解析

工业数据采集是工业物联网的核心基础,其本质是通过标准化技术连接异构设备。在协议层面,Modbus、OPC UA、Profibus等工业通信协议存在显著差异,导致数据模型和实时性要求各不相同。精确的时钟同步技术(如IEEE 1588)成为跨设备数据关联的关键,而边缘计算架构能有效解决云端集中处理的延迟与带宽问题。通过分层解耦的设计原则,结合MQTT等轻量级协议转换,可实现故障隔离与弹性扩展。在智慧水务、风机监测等场景中,这种架构已证明其价值——既能满足实时控制需求,又能为后续的AI分析提供高质量数据基础。当前

weixin_29164185的博客 6

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

【亲测免费】 Kafka with Akka Streams and Kafka Streams 教程

Kafka with Akka Streams and Kafka Streams 教程 1. 项目介绍 本项目是一个结合了Kafka Streams和Akka Streams的流处理应用示例。通过这个项目,开发者可以学习如何在集群环境中部署和扩展流处理应用,特别是当数据源是Kafka时。项目提供了多个实现案例,不仅比较了Akka Streams和Kafka Streams的差异,还展示了如何支持...

gitblog_00406的博客 1214

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Kafka Streams 和 Apache Flink 的无状态流处理与有状态流处理

Kafka Streams 和 Apache Flink 与数据库和数据湖相比的无状态和有状态流处理的概念和优势。 在数据驱动的应用中,流处理的兴起改变了我们处理和操作数据的方式。虽然传统数据库、数据湖和数据仓库对于许多基于批处理的用例来说非常有效,但在要求低延迟、可扩展性和实时决策的场景中,它们显得力不从心。 本文以Kafka Streams和Apache Flink为例,探讨无状态和有状态流处理的关键概念。这些原则适用于任何流处理引擎,无论是开源引擎还是云服务引擎。

涤生大数据 1810

kafka-storm-starter与Kafka Streams对比分析:如何选择适合你的流处理方案

在现代大数据处理领域,流处理技术已经成为实时数据处理的**核心工具**。本文将深入对比kafka-storm-starter和Kafka Streams这两个重要的流处理方案,帮助你做出明智的技术选择。😊 ## 项目简介与核心功能 **kafka-storm-starter**是一个展示如何集成Apache Kafka与Apache Storm、Apache Spark Streaming的

gitblog_00241的博客 339

流处理框架选型:Flink vs Spark Streaming vs Kafka Streams多维度对比分析

三个流处理框架的选型不是"谁更强"的比较,而是"谁更匹配团队的技术栈和业务需求"的适配过程。延迟需求:Flink(ms级) > Kafka Streams(5ms级) > Spark(100ms级)部署复杂度:Kafka Streams(嵌入) < Spark(已有集群) < Flink(独立集群)时间语义:Flink(Watermark) > Kafka Streams(Consumer偏移) > Spark(批次边界)SQL支持。

jiang_style的博客 4378

【流处理专家私藏笔记】:Kafka Streams窗口管理的7个高级技巧

掌握Kafka Streams窗口操作的精髓,解决实时流处理中的时序难题。涵盖滚动、滑动、会话窗口的应用场景与优化技巧,提升数据聚合准确性与系统性能。7个高级实践方法助力构建高效流式应用,值得收藏。

AlgoInk的博客 795
上一篇: Linux文件系统是怎么工作的?
下一篇: 阿里架构师一文详解微内核架构,原来微内核这么简单
Java_Cappuccino
博客等级 码龄7年 17粉丝 64原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值