Apache kafka 微服务之间的通信:ApacheKafka vs Hazelcast';s话题
免责声明。 我有和的经验。我是新来的。对不起,如果我的问题看起来是先入为主的,那不是 有两种广泛的方式来安排微服务之间的通信:REST和消息传递。在我所在的地区,当有人说他们正在使用消息传递在微服务之间进行通信时,事实上这意味着ApacheKafka 我很想知道为什么ApacheKafka比Hazelcast的主题更适合微服务之间的通信需求?更好吗?因为哪些保证、特性或体系结构决定 Hazelcast的集群范围消息传递示例如下所示: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
// 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中不可用 现在。从微服务设计的角度来看,这可能会在设计选项方面产生巨大的差异。例如,任何利用消息传递的微服务本质上都是通过异步通道进行的明显的同步通信 从这个角度来看,采用以下用例(仅示例):