Kafka:微服务中消息代理的绝佳选择

已发表: 2022-11-19

Kafka 是一个分布式流媒体平台。 它通常用于日志聚合、实时流处理和事件溯源。 最近,Kafka 作为微服务的消息代理越来越受欢迎。 Kafka 不是像 ActiveMQ 或 RabbitMQ 这样的传统消息队列。 它没有存储所有消息的中央服务器。 相反,它使用发布-订阅模型。 消息存储在主题中,每个主题可以有多个分区。 Kafka 具有高可用性和可扩展性。 它每天可以处理数十亿条消息。 Kafka 也非常快。 它可以实时处理消息。 Kafka 是构建微服务消息代理的绝佳选择。 它具有高可用性、可扩展性和快速性。

Kafka 是一个实时消息系统,使这成为可能。 数据流不受干扰,可以分布式或容错。 Kafka Data Integration Bus是一种数据交换协议,可以让广泛的生产者和消费者共享数据。 Kafka 的功能类似于 MongoDB 和 RDS,它们在您的应用程序末端充当数据缓冲区。

KSQL 是一种基于 SQL 的脚本语言,用于分析和处理Apache Kafka中的实时流数据。 KSQL 包含一个用于流处理的交互式框架,旨在允许您执行流处理活动,例如数据聚合、过滤、连接、会话化、窗口化等。

正如 Apache Kafka 所展示的那样,它不仅仅是一个出色的消息代理。 该框架实现具有许多类似于数据库的特性,使其适合在数据库中使用。 因此,它现在用作业务事件记录,而不是依赖于关系数据库。

Kafka 应用程序以简单高效的方式从 MongoDB 流式传输数据,从而节省了时间和精力。 企业需要 MongoDB 向其他订阅者发布大量数据以及管理多个数据流。 Kafka MongoDB 连接服务使开发人员能够使用流行的行业工具 MongoDB 创建多个异步流。

在数据库中,Apache Kafka 充当模型。 数百家公司使用它来提供 ACID 保证并执行关键任务。 然而,在大多数情况下,Kafka 的竞争力不如其他数据库。

Kafka 是什么类型的数据库?

图片来源:https://davidxiang.com

Kafka 是一种用于存储和检索消息的数据库。 它是一个分布式系统,被设计为可扩展和容错的。

它是一个用 Scala 和 Java 编写的开源流处理平台,是 Apache 软件基金会的Kafka 项目的一部分。 计算机科学中的流是随时间推移可用的信息元素的集合。 流可以定义为一次处理一个传送带中的项目。 最基本形式的流可以是一系列看似无关的事件。 事件溯源的概念不同于开发人员习惯的数据仓库和数据分析的概念。 如何使用 Kafka 作为数据库? 蓝色是同意交易的公司。

根据 Team Red 的说法,程序员在从传统数据库转向 Kafka 时犯了一个巨大的错误。 根据 Martin Kleppmann 的说法,Red 团队关于 Kafka 适合所有人的信息是居高临下的。 Red 团队在 Kafka 和 Streams 方面存在的问题是,他们在开发人员丢弃 RDMS 时遇到了问题。 当呈现永久事件日志时,它将始终具有其历史上下文,从而易于审核。 数据库管理有很多优点,但也是最困难的方面之一。 传统数据库以两种完全不同的方式运行:它将读和写混为一谈。 对于程序员来说,跨多个表维护和同步重复数据至关重要。

缩放会随着您的移动而改变模式。 流的特点是明确区分读者和作者的关注点。 Kafka 写入文件的速度与 Elastic Search 向其推送更新的速度之间没有关系。 因此, Kafka 用户处理日志以生成各种物化视图。 使物化视图作为一种方便的缓存机制工作需要一些前期成本。 物化视图,除了存储自己的数据和缩放之外,是基础设施的重要组成部分。 对于 99% 的企业,DBMS 是最好的基础。

您的应用程序可能属于此类,并且您可能有权根据您的背景获得一种新颖的架构。 如果用日志替换数据库,许多关键功能将丢失。 这些功能包括外键约束、原子(全有或全无)事务以及有助于解决并发问题的过程隔离技术。 Arjun 假定您的应用程序的完整性始终得到维护。 当您在流上工作时,大多数人认为理所当然的基本功能会变成额外的责任。 将意图与书面陈述分开至关重要。 一个常见的配置是将 Kafka 与变更数据捕获系统一起使用。

据 Team Red 称,数据库的数据完整性功能对于实现数据控制至关重要。 事务必须与传统数据库隔离开来,以便考虑它们。 因此,单篇文章的成本可能很高。 如果您的应用程序正在努力应对大量昂贵的写入,您可能被迫迁移到更传统的数据库。 Red 团队没有提到在 Kafka 前面使用数据库会降低其最佳功能。

与传统的消息系统相比,这种设计的优势非常明显。 Kafka 的第一个优势是它可以处理大量的请求。 此外,由于数据只在需要时写入磁盘,因此 Kafka 可以处理海量数据。
SQL Server 是属于工具类别的数据库工具。 这种手持设备用途广泛且可靠,但有时可能难以使用。 Kafka 和 Azure 都是功能非常强大的平台,但 Kafka 是按比例放大的,而 Azure 是按比例缩小的。
SQL Server 对于需要大量数据存储的企业来说是一个优秀的工具,但对于那些需要快速扩展或高吞吐量的企业来说,它可能不是最佳选择。 对于需要在不影响性能的情况下处理大量数据的业务,Kafka 是比 SQL Server 更好的选择。

Kafka:时间序列遥测的分布式存储系统

Kafka 分布式存储系统采用基于主题的模型来存储数据。 数据可以存储在 Kafka 数据库的基于主题的模型中,而不是关系数据库中。 它的行为类似于Kafka 主题中的队列,尽管与队列的行为方式不同。 它可以在 Kafka 框架中存储大量时间序列,而不是时间序列数据库。

Kafka 和 MongoDB 有什么区别?

图片来源:https://medium.com

它是一种基于分布式系统的分布式、分区和复制的提交日志服务。 尽管其设计独特,但它是消息传递系统的重要组成部分。 另一方面,MongoDB 被描述为“伟大创意的数据库”。

由于 Kafka 不支持开箱即用的队列,因此您必须将其 hack 到系统的消费者版本中。 如果需要关系数据库,另一个工具可能会有更大的用处。 MongoDB 是一个很好的选择,原因有很多,包括它的易用性和灵活性。 Apache 的用户支持可用。 Confluent 有一个与 Kafka 项目同时在 Linkedin 创建的 Kafka(如果愿意付费的话)。 有一个供应商可以执行自动备份并自动扩展集群是非常方便的。 如果您没有了解 MongoDB 的系统管理员或 DBA,最好使用专门从事 MongoDB 托管的第三方。

Kafka 以其最基本的形式旨在允许我们对消息进行排队。 Cassandra 的存储引擎可确保恒定时间写入您的数据,无论数据变得多大。 MongoDB 提供自定义 map/reduce 实现以及对分析的本机 Hadoop 支持,而 Cassandra 则没有。 它是由您还是由其他提供商托管都没有关系,因为成本通常是合理的。

卡夫卡与。 传统数据库系统

需要注意的是,Kafka 与传统数据库系统之间存在一些差异。
因为 Kafka 是一个流媒体平台,它可以处理高速率的数据摄取,而无需进行大量的预先处理。
运行 Kafka 时,数据由尾读取而不是磁盘读取消耗。
页面缓存的使用减少了 Kafka 往返数据库访问的需要。
为了向下游客户发送数据,Kafka 使用发布/订阅消息传递。

什么是卡夫卡数据库

图片来源:https://yelp.com

Kafka 是一种常用于存储流式数据的数据库。 它是一个分布式系统,被设计为可扩展和容错的。 Kafka 通常用于构建实时数据管道和流式应用程序。 它可以处理高吞吐量和低延迟。

近年来,诸如 Kafka 之类的消息代理越来越受欢迎。 根据支持者的说法,Kafka 是数据管理的范式转变。 重要的是要记住,使用 Kafka 作为您的主要数据存储并不能为您提供隔离。 数据库系统遇到的每一个问题都会在未来得到解决。 黑客可以利用自主架构中的缺陷窃取数据。 如果两个用户同时尝试购买同一件商品,他们都会成功,我们将耗尽他们两人的库存。 这些在运行 gaslight 设备时使用时间旅行功能的架构依赖于事件驱动的架构。

管理大量数据是 Kafka 的一个绝佳用途。 事务仍应使用传统的 DBMS 进行隔离。 使用 OLTP 数据库进行准入控制,使用 CDC 进行事件生成,并在视图出现时对下游副本进行建模,以便彻底颠覆您的数据库。

Kafka 还可用于存储大量数据并进行日常处理。 以批处理或流模式处理大数据的能力是优于其他方法的优势。 例如, Kafka 进程可用于从多个服务器检索日志文件并将它们存储在数据库或搜索索引中。 还提供了一个流式 API,可用于实时处理数据。

卡夫卡与 SQL

总的来说,Kafka 和 MySQL 分为两类:消息队列和数据库应用。 大多数开发人员将 Kafka 视为一种高吞吐量、分布式和可扩展性的解决方案,而 MySQL 因其简单性、性能和易用性而被视为最受欢迎的解决方案。

Kafka 上的 Pub-sub 消息传递是一个分布式、容错、高吞吐量的系统,可以处理大量数据。 MySQL 是世界上最流行的开源数据库,旨在用于关键任务和重负载生产系统。 开发人员认为 Kafka 比 MySQL 更强大,因为它具有高吞吐量、分布式架构和可扩展性; 而 SQL、Free 和 Easy 是 MySQL 用户喜欢它的主要原因。 如果您想亲身体验数据库管理系统 (DBMS),我推荐您使用 PostgreSQL。 在 Vital Beats,我们主要使用 Postgres,因为它使我们能够在有效数据管理和备份之间实现所需的平衡,同时仍然支持命令行。 如果您计划在本地或云端托管数据库,第一个接触点是 PaaS(平台即服务)数据库。 因为 MongoDB 将数据写在与一个文档相同的级别上,所以没有事务就很难保持一致性。

文档存储,如 Amazon DynamoDB 和 AWS RedShift 中的文档存储,与 MongoDB 中的键值对(或列存储)有很大不同。 使用#Nosql 数据库查询更快更容易,因为开发时间减少了。 作为房地产行业的新员工,我想选择一个随着时间的推移会非常高效的数据库。 如果您通过单一区域部署在 AWS 上运行 Aurora Postgres,它是我推荐的最佳平台之一。 如果你在三个云环境中使用 PostgreSQL,你将体验到更好的多区域复制。 如果您正确配置它们,这三个数据库中的任何一个都将高效、可扩展且长期可靠地运行。 Uber 出于各种原因从 Postgres 转向 MySql,包括需要更敏捷和可靠的数据传输系统。

OPS Platform 的首席技术官表示,Postgres 因其速度和易用性而成为其产品最有效的长期选择。 与 MySQL 7.x 相比,MySQL 8.0 中的事务处理速度更快。 数据库更安全吗? 是否可以随机更改加密密钥? MySQL 和 MongoDB 是两个最流行的开源数据库。 除了可以轻松存储数据之外,MongoDB 还可用于通过内容分发网络 (CDN) 存储大量传入数据。 Postgres 相对于其他对象关系数据库的主要优势在于它强调可扩展性和标准遵从性。

可以创建常规 B 树和散列索引,以及表达式和部分索引(那些只影响表的一部分的索引)。 Redis 和 Kafka 之间最基本的区别是它们使用企业消息传递框架。 当我选择一种技术时,我正在寻找一种云原生技术。 除了服务发现,NATS 还可以用来替代负载均衡、全局多集群等操作。 Redis 唯一不做的就是充当纯消息代理(截至撰写时)。 因此,它更像是一个通用的内存中键值存储。 尽管拥有丰富的音乐库,但我的歌曲时长常常超过两个小时。

将音频文件在数据库行中存储几个小时的问题是它们不容易搜索。 如果您愿意,可以考虑将音频文件存储在 Backblaze b2 或 AWS S3 等云存储服务中。 有没有在 IoT World 上使用 MQTT Broker 的解决方案? 它位于其中一个数据中心内。 我们目前正在处理它以用于警报和警报相关目的。 我们的主要目标是使用更轻的产品来降低操作复杂性和维护成本。 如果我们可以将 Apache Kafka 与这些额外的第三方 API 调用集成,那将是理想的。

RabbitMQ 应用程序是重试和排队的绝佳选择。 如果您不需要每条消息由多个用户处理,您可以使用 RabbitMQ。 使用 Kafka 来交付带有确认的系统是没有意义的。 Kafka 事件状态管理器与持久化事件状态管理器类似,允许您使用流 API 转换和查询各种数据源。 RabbitMQ 框架非常适合一对一的发布者或订阅者(或消费者),我相信可以配置扇出交换来支持多个消费者。 Pushnami 项目演示了如何将实时数据从一个数据库迁移到另一个数据库。 由于每个前端 (Angular)、后端 (Node.js) 和前端 (MongoDB) 都是本机的,因此数据交换要容易得多。

为了避免翻译层,我跳过了与层次结构部分的关系。 在 MongoDB 对象中保持有限大小并使用正确的索引至关重要。 早在 1960 年代,一些最早的电子病历 (EMR) 就使用了面向文档的数据库 MUMPS。 MongoDB 存储了多达 40% 的所有医院记录,被认为是一个强大的医疗数据库。 然而,有一些非常聪明的方法来执行非本机支持的地理查询,从长远来看,这是极其缓慢的。 Amazon Kinesis 每秒处理来自数十万个来源的数十万个数据文件。 RabbitMQ 使您可以轻松地从任何应用程序发送和接收消息。 Apache ActiveMQ 速度快,支持范围广泛的跨语言客户端,并且是一种健壮的脚本语言。 Hadoop 数据使用名为 Spark 的快速通用处理引擎进行处理。

Kafka 与 MongoDB

Mongodb 是一个强大的面向文档的数据库,具有许多特性,使其成为各种应用程序的不错选择。 Kafka 是一个高性能的流媒体平台,可用于构建实时数据管道和流媒体应用程序。

从作为源的 MongoDB 传输到其他 MongoDB 源或其他 MongoDB 源可以与 Kafka 到 MongoDB 应用程序无缝连接。 在 MongoDB Kafka 连接器的帮助下,您将学习如何高效地传输数据。 使用此功能,您可以为您的组织创建全新的 ETL 管道。 Confluent 提供了多种充当源和汇的连接器,允许用户在两​​者之间传输数据。 Debezium MongoDB 连接器就是这样一种连接机制,它使 Kafka MongoDB 用户能够连接到 MongoDB 数据库。 在启动 Confluent Kafka 之前,您必须首先确保它正在您的系统上运行。 通过使用 KStream、KSQL 或任何其他工具(如 Spark Streaming)等功能,您可以在 Kafka 中分析数据。

将数据输入仓库需要手动脚本和自定义代码。 Hevo 的无代码数据管道平台让您无需编码即可创建简单的数据管道系统。 Hevo 透明的定价平台使您能够实时查看 ELT 支出的每个细节。 试用期持续 14 天,包括 24×7 支持。 端到端加密是通过使用最严格的安全认证来完成的。 Hevo 可用于将您的 Kafka 和 MongoDB 数据安全地传输到 150 个不同的数据源(包括 40 个免费来源)。

什么是 Kafka 和 Mongodb?

MongoDB Kafka 连接器是经过 Confluent 验证的连接器,它将来自 Kafka 主题的数据作为数据接收器保存到 MongoDB 中,并将对这些主题的更改作为数据源发布。

使用 Kafka 作为数据库的优缺点

哪个数据库适合Kafka? 原则上可以使用Kafka来创建数据库。 结果将是对困扰数据库管理系统数十年的每一个主要问题的检查。 数据库管理系统 (DBMS) 是一种组织和查询数据的软件。 它们是大型应用程序和存储必须由多个用户访问的数据所必需的。 DBMS 分为两种类型:关系型和非关系型。 关系模型是在关系 DBMS 中表示信息的标准方法。 它们很受欢迎,因为它们易于使用,并且可以用于存储以表格形式组织的数据。 不使用关系模型的 DBMS 不如使用其他模型的 DBMS 强大。 为了更有效地组织数据,数据还以表格以外的其他格式存储,例如数据流。 Kafka 模型用于创建数据库,可用于多种用途。 流处理是 Kafka 的核心,这是一种新的数据表示模型。 数据管理系统 (DMS) 是数据管理的重要组成部分。 然而,使用 Kafka 作为数据库有时会很困难。 DBMS 遇到的一些最常见的问题是性能、可伸缩性和可靠性。 Fivetran 首席执行官 George Fraser 和 Materialise 首席执行官 Arjun Narayan 共同撰写了这篇文章。

卡夫卡持久化数据库

Kafka 持久性数据库提供了一种以高可用和可扩展的方式将数据存储在kafka 集群中的方法。 默认情况下,kafka 会使用内存数据库来存储数据,但这不适合生产部署。 kafka 持久化数据库可用于为 kafka 数据提供更可靠的存储选项。

LinkedIn 在 2011 年创建了开源 Apache kaffef。该平台能够以极低的延迟和吞吐量提供实时数据。 在大多数情况下,可以通过Kafka Connect从外部系统导入和导出数据。 新的解决方案可以帮助解决存储性能低下和驱动器未充分利用等问题。 尽管存在架构方面的挑战,本地闪存仍然是 Kafka 系统的绝佳选择。 因为 Kakfa 中的每个主题只能在一个驱动器上访问,所以会增加未充分利用的情况。 同步也可能很困难,从而导致成本和效率问题。

当 SSD 出现故障时,必须完全重建其中的数据。 这个耗时的过程会降低集群性能。 Kafka 最适合基于 NVMe/TCP 的存储,因为它可以平衡可靠性和性能之间的权衡。

Kafka 是一个很棒的消息系统,但不是一个完美的数据存储解决方案

Kafka 是一个优秀的消息系统,可以用来存储数据。 Kafka 的保留选项之一是保留时间为 -1,它指的是生命周期保留。 但是,Kafka 的可靠性远不及传统数据库。 需要注意的是,Kafka 将数据存储在磁盘、校验和和复制中以实现容错,因此积累更多的存储数据不会降低速度。 Kafka 可以用来发送和接收消息,但它不是存储数据的最佳选择。

什么是卡夫卡

Kafka 是一种快速、可扩展、持久且容错的发布-订阅消息系统。 Kafka 被 LinkedIn、Twitter、Netflix 和 Airbnb 等公司用于生产。
Kafka 的设计简单明了。 它是一个运行在机器集群上的分布式系统,可以水平扩展。 Kafka 旨在处理高吞吐量和低延迟。
Kafka 用于构建实时流数据管道和应用程序。 它可用于实时处理和聚合数据。 Kafka 还可以用于事件处理、日志记录和审计。

LinkedIn 于 2011 年推出了 Kafka 来处理实时数据馈送。 如今,超过 80% 的财富 100 强企业都在使用 Kafka。 Kafka Streams API是一个功能强大的轻量级库,旨在实现即时处理。 除了流行的分布式数据库之外,Kafka 还包括分布式提交日志的抽象。 与消息队列不同,Kafka 是一个具有高可扩展性的高适应性、容错的分布式系统。 例如,它可用于管理 Uber 的乘客和司机匹配,或在 British Gas 提供实时分析。 许多微服务依赖于 Kafka。 Confluent 的云原生、完整、完全托管的服务优于 Kafka。 Confluent 通过将历史数据和实时数据结合到一个统一的真实来源中,可以轻松构建全新类别的现代事件驱动应用程序。

在 Kinesis 的帮助下,您可以处理范围广泛的数据流,使其成为一个功能强大且用途广泛的流处理平台。 它是一个流行的平台,因为它的速度、简单性和与各种设备的兼容性。 由于其可靠性,它是最受欢迎的流媒体平台之一。 由于其耐用性,它可以处理大量数据而不会遇到任何问题。 此外,由于它是一个被广泛使用和支持的知名平台,因此很容易找到合作伙伴或集成商来帮助您开始使用它。 如果您正在寻找一个既强大又可靠的流媒体平台,Kinesis 是一个很好的选择。

Kafka:正在取代数据库的消息系统

Kafka 是一个消息系统,用于构建实时流数据管道和应用程序,可以使实时数据流适应不断变化的数据环境。 通过使用用 Scala 和 Java 编写的 Kafka,通过实时事件流处理大数据。 Kafka 连接可以从一个点扩展到另一个点,也可以用于在源之间发送数据。 事件流媒体平台旨在提供事件的实时流媒体。 将数据库与 Kafka 等消息传递解决方案进行比较是不公平的。 由于 Kafka 中的特性,不再需要数据库。

Kafka 不是数据库

Kafka 不是数据库,但它经常与数据库结合使用。 它是一个消息代理,可用于在系统的不同组件之间发送消息。 它通常用于解耦系统的不同部分,以便它们可以独立扩展。

可以用数据库替换 Apache Kafka,但不要为了方便而这样做。 在 Top Gear 剧集中,主角每人因购买二手中置发动机意大利超级跑车而获得 10,000 美元,这让我想起了旧的 Top Gear 剧集,其中主角每人获得 10,000 美元。 2011 年,LinkedIn 发布了 Kafka,同年播出了这一集。 它允许您执行最少的持久消息传递,而无需投资于功能齐全的消息传递平台。 基本前提是有一个基本规则。 为生产者进程中记录的每个事件创建一个表(或存储桶、集合、索引等)。 定期从消费者实例轮询数据库,在处理时更新消费者的状态。

为了使模型正常工作,生产者和消费者应该能够同时工作。 考虑以卡夫卡的书为指导,无限期地存储记录,而不是简单地阅读它们。 另一方面,可以通过在插入时复制记录,然后在消费后删除记录来实现不相交的消费者组。 Kafka 使用持久偏移来启用其用户定义的数据扇形并支持多个不相交的消费者。 要停止此功能,您必须从头开始开发服务。 实现基于时间的清除的概念并不难,但需要承载清道夫的逻辑。 在 Kafka 上,对所有参与者(消费者、生产者和管理员)都有细粒度的控制。

它可以在商品和云服务器上每秒处理数百万条记录,没有任何问题。 在非功能意义上,Kafka 针对生产者端和消费者端的高吞吐量进行了优化。 使用Kafka,它是一个分布式的,只追加的日志,在这个领域是无可匹敌的。 与传统的消息代理在消费阶段删除消息不同,Kafka 不会在消息被消费后清除消息。 数据库的吞吐量和延迟几乎肯定需要通过使用专用硬件和高度集中的性能调整来显着改善。 乍一看,免除经纪人可能很有吸引力。 当您使用诸如 Kafka 之类的流式事件平台时,您可以利用其构建过程中所付出的巨大工程努力。

为确保您今天选择部署的任何解决方案都能得到维护,您必须确保它能够以高标准得到维护。 事件存储中的大部分功能只能通过使用数据库来实现。 没有放之四海而皆准的活动商店; 在大多数情况下,任何重要的事件存储几乎肯定是由一个或多个现成数据库支持的定制实现。 您可以在组织数据领域使用数据库以进行高效检索,但您应该避免使用它们来(近)实时分发数据。