Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache kafka 微服务之间的通信:ApacheKafka vs Hazelcast';s话题_Apache Kafka_Microservices_Messaging_Hazelcast - Fatal编程技术网

Apache kafka 微服务之间的通信:ApacheKafka vs Hazelcast';s话题

Apache kafka 微服务之间的通信:ApacheKafka vs Hazelcast';s话题,apache-kafka,microservices,messaging,hazelcast,Apache Kafka,Microservices,Messaging,Hazelcast,免责声明。 我有和的经验。我是新来的。对不起,如果我的问题看起来是先入为主的,那不是 有两种广泛的方式来安排微服务之间的通信:REST和消息传递。在我所在的地区,当有人说他们正在使用消息传递在微服务之间进行通信时,事实上这意味着ApacheKafka 我很想知道为什么ApacheKafka比Hazelcast的主题更适合微服务之间的通信需求?更好吗?因为哪些保证、特性或体系结构决定 Hazelcast的集群范围消息传递示例如下所示: // node #1 Hazelcast.newHazelca

免责声明。 我有和的经验。我是新来的。对不起,如果我的问题看起来是先入为主的,那不是

有两种广泛的方式来安排微服务之间的通信:REST和消息传递。在我所在的地区,当有人说他们正在使用消息传递在微服务之间进行通信时,事实上这意味着ApacheKafka

我很想知道为什么ApacheKafka比Hazelcast的主题更适合微服务之间的通信需求?更好吗?因为哪些保证、特性或体系结构决定

Hazelcast的集群范围消息传递示例如下所示:

// node #1
Hazelcast.newHazelcastInstance()
         .getTopic("topic")
         .publish(new Date());

// node #2
Hazelcast.newHazelcastInstance()
         .getTopic("topic");
         .addMessageListener(message -> /*Do something here*/);
此外,在Hazelcast的主题和成员发现之上还编写了Vert.x(非常粗略地说是actors框架)


卡夫卡消息传递对于微服务之间的交流更好吗?

这是一个有点普通的问题,我不是卡夫卡专家;但我将尝试介绍Hazelcast的消息功能

Hazelcast包含两类主题;一个是常规的
ITopic
,另一个是可靠的Topic,它再次实现了
ITopic
接口。这些用法基本相同,但在保证什么方面有所不同。常规
ITopic
基于Hazelcast的事件机制,不保证消息传递。可靠主题由
Ringbuffer
备份,并且事件不会丢失,因为默认情况下,Ringbuffer配置了一个同步备份。此外,每个可靠的
ITopic
都有自己的环形缓冲区;如果一个主题有一个非常快的制作者,它将不会在运行速度较慢的主题上导致问题。最后,由于常规
ITopic
背后的事件系统与其他数据结构(例如,收集侦听器)共享,因此可能会遇到隔离问题。对于可靠的
ITopic
,这种情况不会发生。但有了所有这些缺点,常规的
ITopic
可以运行得更快一些,因为它使用了fire&forget事件机制

阿帕奇·卡夫卡有其自身的巨大优势;例如,它是作为一个消息流平台构建的,具有临时持久性日志,因此能够将数据存储到磁盘以实现容错


总之,如果您需要消息持久性以及应用程序上消息传递所需的所有功能,请使用Kafka,因为它更专业。但是,如果您需要内存中的数据平台,包括对消息传递的支持,请使用Hazelcast

卡夫卡的消息传递模型/通信与现有的其他主流消息传递基础设施截然不同。虽然下文中的大多数消息传递都明确区分了主题和队列,但卡夫卡严格来说并没有这样做其主题可以作为主题和队列,这种灵活性在Hazelcast中不可用

现在。从微服务设计的角度来看,这可能会在设计选项方面产生巨大的差异。例如,任何利用消息传递的微服务本质上都是通过异步通道进行的明显的同步通信

从这个角度来看,采用以下用例(仅示例):

  • 有5个Tomcat与2个web应用程序水平部署,它们本质上是一个更大系统的子系统
  • 它们中的每一个都要求交换数据(请求时只读),而不具有任何其他依赖关系(数据交换协议由外部定义)
  • 需要选择性地记录子系统之间的所有交互
  • 解决方案本身很简单,发送请求,等待响应直到超时,如果收到响应则返回,否则返回异常

    从设计的角度来看,这有点复杂。假设采用“最多一次”的处理方式,一般的设计是将请求发布到队列,从主题读取响应。在Hazelcast中,需要IQueue(考虑到缩放不是一个因素)和ITopic。在Kafka中,可以使用一个主题、两个分区和使用者组ID来完成。此外,可以通过向主题/分区添加或删除其他使用者来启用或禁用日志记录

    以上只是一个示例,说明了如何实现异步通信,Hazelcast和Kafka(以及JMS/Camel等)都有自己的灵活性。因此,特定基础设施的选择在很大程度上取决于您的通信设计