微服务之间的沟通:Apache Kafka与Hazelcast的主题

VB_*_*VB_ 2 messaging hazelcast apache-kafka microservices

免责声明.我有使用HazelcastVert.x的经验.我是Apache Kafka的新手.对不起,如果我的问题看起来有先入为主,那就不是了.

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

你能否帮我找到一个线索,为什么Apache Kafka比Hazelcast的Topic更适合微服务之间的通信需求?好点吗?由于哪些保证,功能或架构决策?

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

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

// node #2
Hazelcast.newHazelcastInstance()
         .getTopic("topic");
         .addMessageListener(message -> /*Do something here*/);
Run Code Online (Sandbox Code Playgroud)

还有一些Vertmel(非常讨厌的演员框架)写在Hazelcast的主题和成员发现之上.

Kafka的消息是否更适合微服务之间的通信?

小智 10

这是一个普遍的问题,我不是卡夫卡专家; 但我会尝试讲述Hazelcast的消息功能.

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

Apache Kafka有其巨大的优势; 例如它全部构建为具有临时持久性日志的消息流平台,因此能够将数据存储到磁盘以实现容错.

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