vert.x事件总线可以代替Kafka的需要吗?

时间:2018-12-19 06:01:08

标签: apache-kafka microservices vert.x

我正在评估vert.x框架,以查看是否可以减少使用Spring Boot开发的微服务之间基于Kafka的通信。

问题是: 我可以更换吗 1. Kafka与vert.x事件总线和 2.带有基于vert.x的Verticle的Spring Boot微服务

任何指针都会有很大帮助。

谢谢。

4 个答案:

答案 0 :(得分:2)

要快速回答,我想这取决于您的需求。

是的,事件总线可能是使用异步和非阻塞范例处理微服务顶点之间的本地通信的好方法。

但是在某些情况下,您可能需要:

  • 处理一些常见的企业模式,例如重播机制,消息持久性,事务性阅读
  • 能够按时间顺序处理某种消息
  • 处理并非全部使用相同框架/工具包甚至编程语言编写的多种微服务之间的通信
  • 处理可靠性,弹性和 当您所有的消费者/微服务/垂直终端都死掉时,恢复故障
  • 处理动态水平可伸缩性并监视消费者/微服务/垂直平台

在这种情况下,我宁愿选择Apache Kafka而不是本机eventbus或旧的,流行的JMS兼容系统。

根据您的实际需求,禁止在同一微服务架构中同时使用eventbus和kafka。例如,您可以让一个kafka使用者小组阅读一个kafka主题,以处理扩展,监视,故障恢复和回复机制,然后通过事件总线处理子垂直面之间的通信。

我将在可伸缩性和监视部分进行一些说明,并解释为什么我认为使用vert.x在本地事件总线和集群模式下使用Kafka处理起来更为简单:Kafka允许我们实时了解( through JMX metricsdescribe命令):

  • 对应于主题的“滞后” 未读邮件的数量
  • 每个组中正在收听主题的消费者数量
  • 每个消费者影响的主题分区数
  • i / o指标

因此,可以使用ElasticStack或Prometheus + Grafana解决方案来监控这些指标并使用它们来处理动态可伸缩性(当您知道需要临时增加消费者数量时,例如根据滞后指标和主机的分区数和cpu / ram / swap指标。

要回答第二个问题vert.x或SpringBoot,我的回答不是很客观,但是我会为vert.x的performances on the JVM投赞成票,尤其是因为其简单性。我对Spring工厂及其庞大的抽象层次感到有些厌倦,该层次隐藏了许多引发AOP的注释之下的问题。

此外,在Java微服务世界中,SpringBoot还有其他选择,例如Microprofile的不同实现(例如thorntail project)。

答案 1 :(得分:1)

事件总线不是持久的。您应该将其用于快速的层到层通信,并且更一般地,将其分配到您知道如果发生崩溃可以可以释放它们的事件。

Kafka流是持久性的,您应该在那里发送事件,因为您希望其他(可能是非Vert.x)应用程序使用它们,并且/或者因为要确保这些事件在发生以下情况时不会丢失失败。

反应性(读取为“可伸缩且具有容错性” )的Vert.x应用程序通常结合使用事件总线和某些可复制的消息传递系统,例如AMQP / Kafka /等。 >

答案 2 :(得分:1)

关于这个问题:

  

我可以用基于vert.x的版本替换spring boot微服务吗?

是的,当然,尽管这两个有不同的编程模型。

如果您想要一种更先进的方法,并使用Spring来构建应用程序,同时使用Vert.x来提高I / O和事件处理的资源效率,则可以将它们混合使用,请参见https://github.com/vert-x3/vertx-examples/tree/master/spring-examples以获取示例。

答案 3 :(得分:1)

看看Quarkus框架:在“车间”部分,您将发现Vert.x和Apache Kafka结合在一起!