手机版 欢迎访问魄力云云市场资讯网站

当前位置:主页 > 云虚拟主机 >

租个云服务器_云数据库防火墙

时间:2020-11-03 04:35:42|来源:魄力云|编辑:魄力云|点击:

Kafka Streams和ksqlDB比较–如何选择

ksqlDB是一种专门为流处理应用程序构建的新型数据库,允许用户根据Apache Kafka®中的数据构建流处理应用程序,并提高开发人员的生产率。ksqlDB简化了维护,提供了一个更小但功能强大的代码库,可以为我们的事件驱动架构添加一些重要的rocketfuel。作为初学Kafka的用户,我们通常从几个有说服力的理由开始在我们的基础设施中利用Kafka。最初的用例可能是实现Kafka来执行数据库集成。当存在紧密耦合但各自为政的数据库(通常是RDBMS和NoSQL)时,这一点尤其有用,这些数据库可能成为关键任务应用程序中的单点故障,并导致不幸的意大利面建筑。进入:卡夫卡!Kafka提供了缓冲功能、持久性和背压,并且它将这些系统解耦,因为它在其体系结构核心是一个分布式提交日志。但是,等等,我们为什么会考虑阿帕奇·卡夫卡,还有更多的好处。也许我们想利用它作为一个"消息总线"或"发布/订阅"(请在本文中阅读更多关于它与这些方法的比较)。ApacheKafka与其他企业服务总线(ESB)或发布/订阅解决方案不同,它采用主从式设计。它具有高可用性、容错性、低延迟性,是企业事件驱动体系结构的基础。我们最初的Kafka用例可能看起来有点像变更数据捕获(CDC),在这里我们捕捉来自客户表的更改,以及关系存储中订单表的更改。也许我们会发现,有机会优化卡夫卡,以获得超出上述目的的利益。我们可以在数据发生时对其进行更多的处理和分析,并通过连接流和启用可操作逻辑来获得实时见解,而不是在夜间批处理中等待稍后的时间点进行处理。我们可以做些什么来增强这个数据管道?如果我们对最初的CDC用例进行扩展,我们可以看到我们可以一次转换数据,但可以将其用于许多应用程序。通过将"customer"和"order events"流连接在一起给我们"customer orders",我们使开发人员能够使用这些作为流提供的丰富数据编写新的应用程序,并根据需要将其放入其他数据存储库。另外,由于这个新的流是从卡夫卡消费的,它仍然具有我们之前列出的所有好处。那么,我们如何从RDBMS表中得到可以处理和丰富的实时流呢?为了回答这个问题,我们必须首先理解流表二元性的概念。流表二元性从RDBMS世界到事件驱动世界,一切都是从事件开始的,但我们仍然必须面对这样一个现实:我们在表中有数据。在上面的示例中,我们有两个单独的表用于customer和order事件。这些表是某个时间点上数据的静态视图。当我们将密钥/值数据转换成Kafka时,我们通过Kafka主题来实现。流的概念使我们能够实时读取卡夫卡主题并处理数据。理解数据如何从静态表转换为事件是理解Kafka流和ksqlDB的核心概念。由于流表的对偶性,我们可以在表到流和流到表之间进行保真度转换。当我们把我们的关系数据转换成Kafka友好的格式时,我们可以开始做更多的工作,并实时开发新的应用程序。有很多方法可以进行流处理,但我要重点介绍的两种方法是在安全性和部署方面与Apache Kafka集成得最好的两种:Kafka流,它是Apache Kafka的本地组件,和ksqlDB,这是一个事件流数据库,由ApacheKafka的最初共同创造者构建和维护。作为一个Java库,Kafka Streams允许您在Java应用程序中进行流处理。相比之下,ksqlDB是一个运行在一组服务器上的事件流数据库。它使开发人员能够像在关系数据库上构建传统应用程序一样轻松和熟悉地构建流处理应用程序。流式处理一般的流处理操作是过滤、转换、充实和聚合。ksqlDB允许您将流处理功能无缝地集成到现有的Kafka集群上,其接口与关系数据库一样熟悉。考虑到它使用语言中立的SQL,它对于不同的开发团队(Python、Go和.NET)的易用性也很有价值。所有这些元素都很棒,但是回想一下流表的二元性。我们不仅可以执行诸如提取、转换和加载(ETL)数据之类的常规操作,还可以清理数据并确保在正确的位置获得正确的数据,这也是当今许多公司在生产中使用的一种非常常见的模式。简单的用例,如数据过滤、过滤掉一些数据,并在特定的应用程序中利用该流或满足法规遵从性,这些都是实用程序的其他模式。在流处理应用程序的上下文中工作时,时间变得至关重要。流连接和聚合利用窗口操作,这些操作是根据应用于流的时间模型类型定义的。示例包括处理事件的时间(事件时间)、应用程序捕获数据的时间(处理时间)和Kafka捕获数据的时间(摄取时间)。配置Kafka和开发我们特定的streams应用程序依赖于时间语义,而时间语义因手头的业务用例而异。常见的流处理用例包括:异常检测:检测数据中的反模式;尤其与银行业务或任何基于交易的活动相关,在这些活动中,可以对业务进行快速检测并智能地处理欺诈行为制造和物联网(IoT):考虑检测制造设备故障和防止生产线收入损失的概念使用ksqlDB进行流处理使用ksqlDB,我们可以在Kafka中创建持续更新的物化数据视图,并使用基于SQL的语义以多种方式查询这些物化。ksqlDB客户机是它的命令行界面(CLI)、合流的controlcenter UI和restapi。ksqlDB的服务器实例直接与Kafka通信,您可以添加更多服务器而无需重新启动应用程序。ksqlDB被部署为一个服务器集群。为了适当地调整集群的规模,应该考虑影响服务器处理能力的因素,例如查询复杂性和运行的并发查询的数量。围绕CPU利用率、良好的网络吞吐量和SSD规划容量。当ksqlDB编译为Kafka流时(稍后将介绍更多内容),ksqlDB保持相同的容错性。ksqlDB集群在服务器节点之间进行负载平衡和故障转移。另一个小道消息是不要把ksqlDB部署为大型集群,而是遵循每个团队的每个用例的规则。这与每个用例的数据库概念非常相似。确保适当的资源隔离对于我们部署的成功非常重要。卡夫卡河Kafka Streams是Apache-Kafka项目的一部分,是为Kafka构建的客户端库,允许我们实时处理事件数据。Kafka Streams支持弹性流处理操作,如过滤器、连接、映射和聚合。它还为我们提供了通过定义底层拓扑来执行有状态流处理的选项。对于任何给定的流处理应用程序,数据通常以一个或多个Kafka主题的形式从Kafka到达初始源处理器,该处理器生成用于开始处理的输入流。接下来,下游流处理器节点按照应用程序指定的方式转换数据流。这可能是一个步骤或多个步骤。sink处理器然后将完全转换的数据返回到Kafka主题中。Kafka Streams与ksqlDB的区别ksqlDB实际上是一个Kafka Streams应用程序,这意味着ksqlDB是一个具有不同功能的完全不同的产品,但在内部使用Kafka流。因此,既有相似之处,也有不同之处。部署:与ksqlDB不同,Kafka Streams API是应用程序代码中的一个库!因此,主要区别在于ksqlDB是平台服务,而Kafka Streams是客户用户服务。您不会像使用ksqlDB那样分配服务器来部署Kafka流。您确实需要分配服务器(或容器)资源来部署在幕后使用Kafka流的应用程序。用户体验:Kafka Streams为需要处理的相关分区并行运行任务,复杂度和使用的分区数量会增加CPU利用率。由于我们正在编写应用程序并部署代码,这与ksqlDB的用户体验完全不同。相反,Kafka Streams最终是一个面向Java应用程序团队的API工具,这些团队拥有CI/CD管道,并且能够适应分布式计算。ksqlDB和Kafka流的并行比较为了充分理解ksqlDB和Kafka流之间的区别,Kafka中流处理的两种方式让我们看一个例子。虽然我们在生产中看不到以下欺诈检测用例,但它让我们了解了Kafka流中为从ksqlDB获得相同输出所需的额外代码行。在本例中,我们正在阅读一个支付主题,分析每条消息是否存在欺诈。如果欺诈的概率大于0.8,则消息将写入欺诈性付款主题。ksqlDB示例我们使用CREATE stream语句创建一个流,该语句为欺诈支付输出Kafka主题。我们从概率超过80%的支付流中选择欺诈概率(数据),并将其发布到欺诈支付流中。关于欺诈概率函数的一个重要注意事项:它实际上是一个用户定义函数(UDF)!标量和聚合UDF作为汇合的一部分被释放

云主机服务商 Ucloud云计算 移动云数据 云存储服务器 Ucloud云主机 云计算提供商 阿里数据库 服务器租用 云储存服务器 Web云服务器 ucloud云数据库 独享云主机 云服务器服务商 海外云存储 云服务器主机 云计算解决方案 国内云存储 数据库云平台

Copyright © 2002-2020 魄力云 版权所有