使用Kafka建立可靠的高性能分布式消息传递基础结构

在优锐课学习中了解到,我们可以看到实施资源适配器以将Kafka与企业Java解决方案集成。码了很多专业的相关知识, 分享给大家参考学习。

由于世界已经变得移动化,因此应用程序现在必须实时提供数据。 不仅重要的是存储在数据库表中的最终结果,而且重要的是用户在使用应用程序时执行的所有操作。 无论可用的任何信息(例如用户点击,日志数据或传感器数据)用于增强用户体验,生成报告,为机器学习系统供稿,等等。 今天,开发人员必须专注于基于实时事件流的系统。

下图显示了基于事件流处理的体系结构示例。

Apache Kafka已将其自身确立为构建高度可扩展的基于事件的系统首选解决方案。Kafka为事件流平台提供了快速发展的功能,开发人员可以在现代业务解决方案中使用它。但是,开发人员经常需要将基于IBM MQ或IBM WebSphere Application Platform之类的技术现有Java EE业务解决方案集成到这些新的事件流体系结构中。

考虑这个例子。一家在线商店拥有一个移动应用程序,该应用程序使用Kafka将付款请求数据发送到以Enterprise Java实现的分布式付款系统。该解决方案必须绝对保证一次完整的付款请求处理过程(避免向买方收取多次费用)。 但是,在分布式系统中不可避免发生故障,因此该解决方案需要妥善处理故障。

1、使用Apache Kafka实现消息传递

Apache Kafka是用于事件流处理的分布式系统,广泛用于微服务架构和基于云的环境中。它提供消息传递,存储和事件处理,所有这些都在同一平台内。

下图显示了Apache Kafka组件的基本拓扑,包括通过Kafka集群基础结构交换消息的生产者和消费者。

尽管Kafka有很多优势,但Kafka仍在努力解决以下问题:

  • 在消息处理失败的情况下进行手动补偿的逻辑,这可能导致消息无法处理
  • 不支持XA事务处理
  • 确保在消费者应用程序中进行一次准确的交付处理
  • 将其集成到企业解决方案中的额外开发和可维护性工作

要解决Kafka集成问题,你可以应用传统的消息传递拓扑概念,例如事务日志,恢复日志和XA事务。你可以实现基于Java EE连接器体系结构(JCA)的资源适配器。使用此JCA资源适配器,可以为应用程序服务器提供ACID功能,以进行Kafka消息处理。然后,此JCA资源适配器提供了与Enterprise Java应用程序的无缝Kafka集成。

2、实施JCA资源管理员

Java EE连接器体系结构定义了一组可伸缩,安全和事务机制。 你可以将JCA资源适配器安装到任何符合Java EE的应用程序服务器中,例如IBM Websphere Application Server,IBM Business Process Manager,JBoss,WebSphere Liberty,Glassfish或Weblogic。

Java EE连接器体系结构规范还提供了一组标准合同,这些合同允许企业应用程序和企业信息系统(例如Kafka)之间进行通信。JCA资源适配器可以插入应用程序服务器,并通过照顾所有系统级机制(事务,连接管理,崩溃恢复,错误跟踪和日志记录)来启用Kafka集成。JCA资源适配器将从需要与之集成的企业应用程序中隐藏所有Kafka通信逻辑。通过实现JCA资源适配器,企业应用程序提供商可以专注于实现业务和表示逻辑,而不是与Kafka集成相关的底层逻辑。因此,JCA资源适配器仅需开发一次,即可被不同的应用程序重用。

通过查看下图显示设计的解决方案系统上下文,将其与我们的在线商店付款方案相关联。

移动应用程序将付款请求数据发送到Kafka,后者通过Kafka资源适配器与付款企业应用程序集成在一起。此外,还使用适配器将付款通知发送到Kafka。 适配器启动XA事务,该事务将传播到支付企业应用程序以及通知系统。因此,与付款请求处理相关的所有任务将在同一全局事务中运行,并且一起完成或失败。该设计除了要读取或写入数据的主题外,还需要在Kafka上设置重试,死信和事务日志主题。

现在,让我们更详细地探讨从移动应用程序发送和发送到移动应用程序的消息的处理。

3、入站流

在我们的支付方案中,入站流程是指由在线商店移动应用程序发起的通信,该通信将支付请求数据发送到Kafka。资源适配器提供Kafka连接,并异步将消息传递到应用程序服务器上存在的消息端点。这可以使用JCA规范定义的消息流入合同来实现。

Kafka JCA资源适配器使用一组用于端点激活配置的配置属性来实现激活规范JavaBean。这些配置详细信息定义为应用程序服务器配置的一部分。

资源适配器会定期轮询入站Kafka主题的一批付款请求。成功轮询数据后,它将遍历数据批次,并异步将消息传递到终结点实例。 每个消息端点可能存在多个端点实例,这使并发消息消耗并提供高吞吐量。

Kafka消费者补偿是在安排消息传递之后立即提交的,以避免批次阻塞的问题。 这种设计是可行的,因为资源适配器通过需要在Kafka上设置重试,死信和事务日志主题来实现故障转移过程。在我们的例子中,端点需要支持XA事务,并且需要在向端点发送数据之前创建事务上下文,从而提供原子消息消耗。

如果事务将被应用程序服务器中止,则应回滚端点实例完成的所有工作,并将消息转发给Kafka重试主题。

适配器使用来自Kafka重试主题的消息并对其进行重新处理。在超过配置的重试次数以处理消息之后,适配器会将消息转移到Kafka死信主题。

由于发送到空头邮件主题的消息包含有价值的业务数据,因此监视主题非常重要。

4、出站流量

出站流是指由企业应用程序启动的Kafka通信。在我们的情况下,这是用于将付款确认发送到移动应用程序的通知系统。JCA规范定义了一个连接管理协定,该协定使应用程序服务器能够池化Kafka连接,从而提供了可支持大量客户端的可扩展环境。

Kafka出站连接配置详细信息是使用Managed Connection Factory JavaBean定义的。使用这些配置详细信息,适配器使管理员和开发人员可以配置Kafka生产者并决定功能,例如可靠性,可用性,吞吐量,延迟和事务支持。这些配置详细信息定义为应用程序服务器配置的一部分。

Kafka JCA资源适配器公开了实现CCI(通用客户端接口)和JMS(Java Message Service)接口的Kafka连接工厂和Kafka连接。应用程序组件使用JNDI(Java命名和目录接口)名称查找连接工厂。成功获取工厂后,应用程序将其用于获取访问Kafka的连接。因此,您可以为通知系统应用程序无缝添加Kafka集成,该集成当前将数据发送到IBM MQ或Active MQ之类的JMS消息传递提供程序。

资源适配器出站流封装了底层的Kafka通信逻辑,并提供以下内容:

  • 连接池
  • 使用Kafka交易机制仅保证一次交货
  • 准确的识别,记录和处理Kafka故障
  • 实现XA事务,因此在分布式系统中使用Kafka提供可靠的消息处理。

为了管理出站流中的事务,Kafka资源适配器使用JCA规范定义的事务管理协定。

在我们的情况下,需要将连接工厂设置为支持XA事务,并且当客户端获得连接时,适配器需要启动Kafka事务。如果应用服务器在任何时候回滚该事务,则将终止Kafka事务。在发生XA事务提交的情况下,事务管理器跨参与运行的事务的所有资源执行两阶段提交协议。这样可以保证对托管资源的所有读/写访问都完全落实或回退。

最后,资源适配器通过将事务数据写入Kafka事务日志主题来跟踪正在运行的事务。 写入事务日志主题的数据用于崩溃恢复处理,该崩溃恢复处理在分布式系统中提供可靠的消息处理。

5结论

设计Kafka JCA适配器的方法提供了与标准企业Java解决方案的Kafka事件处理平台的“即插即用” JMS集成。该设计使你可以将Kafka与现有企业应用程序无缝集成,而无需实施补偿逻辑。该适配器还使应用程序服务器能够为企业应用程序所依赖的Kafka连接性和事务管理提供基础结构和运行时环境。

文章写道这里,如有不足之处,欢迎补充~

原文地址:https://www.cnblogs.com/youruike1/p/12052916.html

时间: 2024-10-13 15:22:18

使用Kafka建立可靠的高性能分布式消息传递基础结构的相关文章

Kafka 消息队列系列之分布式消息队列Kafka

介绍 ApacheKafka®是一个分布式流媒体平台.这到底是什么意思呢?我们认为流媒体平台具有三个关键功能:它可以让你发布和订阅记录流.在这方面,它类似于消??息队列或企业消息传递系统.它允许您以容错方式存储记录流.它可以让您在发生记录时处理记录流.什么是卡夫卡好?它被用于两大类的应用程序:构建可在系统或应用程序之间可靠获取数据的实时流数据管道构建实时流应用程序,可以转换或响应数据流要了解卡夫卡如何做这些事情,让我们深入探索卡夫卡的能力.首先几个概念:Kafka作为一个或多个服务器上的集群运行

基于netty轻量的高性能分布式RPC服务框架forest<下篇>

基于netty轻量的高性能分布式RPC服务框架forest<上篇> 文章已经简单介绍了forest的快速入门,本文旨在介绍forest用户指南. 基本介绍 Forest是一套基于java开发的RPC框架,除了常规的点对点调用外,Motan还提供服务治理功能,包括服务节点的自动发现.摘除.高可用和负载均衡等. 架构概述 Forest中分为服务提供方(RPC Server),服务调用方(RPC Client)和服务注册中心(Registry)三个角色. Server提供服务,向Registry注册

下载-深入浅出Netty源码剖析、Netty实战高性能分布式RPC、NIO+Netty5各种RPC架构实战演练三部曲视频教程

下载-深入浅出Netty源码剖析.Netty实战高性能分布式RPC.NIO+Netty5各种RPC架构实战演练三部曲视频教程 第一部分:入浅出Netty源码剖析 第二部分:Netty实战高性能分布式RPC 第三部分:NIO+Netty5各种RPC架构实战演练

Netty实战高性能分布式RPC

Netty实战高性能分布式RPC 课程观看地址:http://www.xuetuwuyou.com/course/171 课程出自学途无忧网:http://www.xuetuwuyou.com 一.课程用到的软件 netty4.1.6.Final Spring Tool Suite 3.8.2.RELEASE Maven3.1 Spring4 Zookeeper3.4.6 JDK1.8.0_111 二.课程目标 1.快速学习netty的使用 2.自己学会构建高性能服务器 3.熟练使用多线程之间交

高性能分布式闪存系统探讨

大家不难发现目前市场上出售的全闪存阵列基本都是采用SATA SSD,其中的原因在于NVMe SSD比SATA SSD贵,SATA SSD目前可以满足绝大多数应用的性能需求.除此之外,其实目前的全闪阵列软件并不能对NVMe SSD进行很好的支持.如果需要支持NVMe SSD,阵列软件还需要做较大规模的调整,例如需要考虑如何充分发挥多核处理器的并发效能,从而解决软件堆栈带来的性能瓶颈问题.在SATA SSD上,由于SATA SSD本身的性能并不是很高,因此,软件堆栈不需要做大规模调整就可以满足应用需

kafka的c/c++高性能客户端librdkafka简介

Librdkafka是c语言实现的apachekafka的高性能客户端,为生产和使用kafka提供高效可靠的客户端,并且提供了c++接口 性能: Librdkafka 是一款专为现代硬件使用而设计的高性能库,它尝试将内存复制保持在最小,可以让用户决定是需要高吞吐量还是低延迟的服务,性能调优的两个最重要的配置是: *batch.num.messages:在发送消息之前累积在本地队列中等待的消息的最小数量. *queue.buffering.max.ms:等待batch.num.messages多长

(第8篇)实时可靠的开源分布式实时计算系统——Storm

摘要: 在Hadoop生态圈中,针对大数据进行批量计算时,通常需要一个或者多个MapReduce作业来完成,但这种批量计算方式是满足不了对实时性要求高的场景.那Storm是怎么做到的呢? 博主福利 给大家赠送一套hadoop视频课程 授课老师是百度 hadoop 核心架构师 内容包括hadoop入门.hadoop生态架构以及大型hadoop商业实战案例. 讲的很细致, MapReduce 就讲了 15 个小时. 学完后可以胜任 hadoop 的开发工作,很多人学的这个课程找到的工作. (包括指导

Beanstalkd一个高性能分布式内存队列系统

流行的队列框架大致有:Memcacheq,Fqueue, RabbitMQ, Beanstalkd以及linkedin的kafka.RabbitMQ使用比较广泛,Beanstalkd是后起之秀.Beanstalkd之于RabbitMQ,就好比Nginx之于Apache,Varnish之于Squid.后面在项目中使用Beanstalkd的过程中,更发现其简单.轻量级.高性能.易使用等特点,以及优先级.多队列.持久化.分布式容错.超时控制等特性.下面简单介绍一下Beanstalkd. 设计思想 高性

kafka数据可靠传输

再说复制Kafka 的复制机制和分区的多副本架构是Kafka 可靠性保证的核心.把消息写入多个副本可以使Kafka 在发生崩愤时仍能保证消息的持久性. Kafka 的主题被分为多个分区,分区是基本的数据块.分区存储在单个磁盘上,Kafka 可以保证分区里的事件是有序的,分区可以在线(可用),也可以离线(不可用) .每个分区可以有多个副本,其中一个副本是首领.所有的事件都直接发送给首领副本,或者直接从首领副本读取事件.其他副本只需要与首领保持同步,并及时复制最新的事件.当首领副本不可用时,其中一个