vert.x 事件总线可以取代 Kafka 吗?

2023-12-24

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

问题是: 我可以更换吗

  1. 带有 vert.x 事件总线的 Kafka 和
  2. 带有基于 vert.x 的 verticle 的 Spring Boot 微服务

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

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

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

  • 处理一些常见的企业模式,例如重播机制、消息持久性、事务性读取
  • 能够按时间顺序处理某种消息
  • 处理并非全部使用相同框架/工具包甚至编程语言编写的多种微服务之间的通信
  • 处理可靠性、弹性和 当所有消费者/微服务/verticles 死亡时的故障恢复
  • 处理动态水平可扩展性并监控消费者/微服务/verticle
  • 能够使用部署在多数据中心和多区域中的单个集群

在这些情况下,我更愿意选择 Apache Kafka,而不是本机事件总线或旧的令人着迷的 JMS 兼容系统。

并不禁止根据您的实际需求在同一个微服务架构中同时使用eventbus和kafka。例如,您可以让一个 kafka 消费者组读取 kafka 主题来处理扩展、监控、故障恢复和回复机制,然后通过 eventbus 处理子 verticle 之间的通信。

我将澄清一点可扩展性和监控部分,并解释为什么我认为使用 Kafka 在本机事件总线上处理这个问题更简单,并且使用 vert.x 进行集群模式:Kafka 让我们实时了解(通过 JMX 指标 https://www.datadoghq.com/blog/monitor-kafka-with-datadog/describe命令):

  • 对应主题的“滞后” 未读消息数
  • 每个组中正在收听某个主题的消费者数量
  • 每个消费者影响的主题的分区数
  • 输入/输出指标

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

要回答第二个问题 vert.x 还是 SpringBoot 我的回答不是很客观,但我会投票给 vert.x,因为它尤其是它的简单性。我有点厌倦了 Spring 工厂及其庞大的抽象层,这些抽象层在堆积如山的注释下隐藏了很多问题,从而触发了堆积如山的 AOP。

此外,在微服务的 Java 世界中,还有 SpringBoot 的其他替代方案,例如 Microprofile 的不同实现(刺尾项目 https://www.youtube.com/watch?v=eJBqo8iKBHI例如)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

vert.x 事件总线可以取代 Kafka 吗? 的相关文章

  • 如何在kafka消费组中动态添加消费者

    我应该如何知道何时必须扩展消费者组中的消费者 当存在快速生产者时 消费者扩大规模的触发因素是什么 一种直接的方法是获取消费者延迟 这可以计算为提交的偏移量和开始偏移量之间的差值 如果最后 n 次计算的延迟正在增加 您可以扩大规模 反之亦然
  • 有没有办法重新分区 Kafka 流中的输入主题?

    我有一个由 byte 键控的主题 我想对其进行重新分区并通过消息正文中字段中的另一个键处理该主题 我发现有KGroupedStream and groupby功能 但它需要一个聚合函数来转换为 KTable KStream 我不需要聚合 我
  • Kafka Java 消费者从未收到任何消息

    我正在尝试设置一个基本的 Java 消费者来接收来自 Kafka 主题的消息 我已经跟踪了样本 https cwiki apache org confluence display KAFKA Consumer Group Example h
  • Strimzi 运算符 Kafka 集群 ACL 未启用类型:简单

    我们知道要启用Kafka ACL属性authorizer class name kafka security auth SimpleAclAuthorizer要添加到server properties但是如果 Kafka 集群由 Strim
  • Kafka 主题删除不起作用

    我使用的是 Kafka 0 8 2 版本 在开发过程中 我想我可能需要删除一个主题 所以我所做的是将以下行放入服务器配置文件中并启动两个 kafka 服务器 delete topic enable true 当我需要删除一个主题并运行以下命
  • 如何更改主题的起始偏移量?

    是否可以更改新主题的起始偏移量 我想创建一个新主题并从偏移量开始阅读10000 How 自从卡夫卡0 11 0 0 https issues apache org jira browse KAFKA 4743你可以使用脚本kafka con
  • Kafka:隔离级别的影响

    我有一个用例 我需要 Kafka 分区中的 100 可靠性 幂等性 无重复消息 以及顺序保留 我正在尝试使用事务 API 来建立概念验证来实现这一目标 有一个名为 isolation level 的设置 我很难理解 In this arti
  • 从副本消费

    Kafka 将主题的每个分区复制到指定的复制因子 据我所知 所有写入和读取请求都会路由到分区的领导者 有没有办法从追随者那里消费而不是从领导者那里消费 Kafka中的复制只是为了故障转移吗 在 Kafka 2 3 及更早版本中 您只能从领导
  • 微服务、amqp 和服务注册/发现

    我正在研究微服务架构 实际上我想知道一些事情 我非常同意使用 返回 服务发现来在基于 REST 的微服务上发出请求 我需要知道发出请求的服务 或至少是服务器集群的前端 在哪里 因此在这种情况下能够发现 ip port 是有意义的 但我想知道
  • org.springframework.security.oauth2.common.exceptions.InvalidGrantException:凭据错误

    我正在开发Spring Boot 授权服务器 OAuth 资源服务器 在这个例子中 我可以通过邮递员轻松查询spring microservices oauth 服务器并获取受保护的数据 我创建了客户端来访问邮递员正在执行的数据 但我遇到了
  • Kafka Streams - 跳跃窗口 - 去重键

    我正在 4 小时窗口上进行跳跃窗口聚合 每 5 分钟前进一次 由于跳跃窗口重叠 我得到了具有不同聚合值的重复键 TimeWindows of 240 60 1000L advanceBy 5 60 1000L 如何消除具有重复数据的重复键或
  • 通过SOCKS代理连接Kafka

    我有一个在 AWS 上运行的 Kafka 集群 我想用标准连接到集群卡夫卡控制台消费者从我的应用程序服务器 应用程序服务器可以通过 SOCKS 代理访问互联网 无需身份验证 如何告诉 Kafka 客户端通过代理进行连接 我尝试了很多事情 包
  • 在spark-kafka中使用schema将ConsumerRecord值转换为Dataframe

    我正在使用 Spark 2 0 2 和 Kafka 0 11 0 并且 我正在尝试在火花流中使用来自卡夫卡的消息 以下是代码 val topics notes val kafkaParams Map String Object bootst
  • 调试自定义 Kafka 连接器的简单有效的方法是什么?

    我正在使用几个 Kafka 连接器 在控制台输出中没有看到它们的创建 部署有任何错误 但是我没有得到我正在寻找的结果 没有任何结果 无论是期望的还是否则 我基于 Kafka 的示例 FileStream 连接器制作了这些连接器 因此我的调试
  • 生产者程序中的 kafka 网络处理器错误(ArrayIndexOutOfBoundsException:18)

    我有下面的 kafka Producer Api 程序 我对 kafka 本身是新手 下面的代码从 API 之一获取数据并将消息发送到 kafka 主题 package kafka Demo import java util Propert
  • 使用表白名单选项更新 Debezium MySQL 连接器

    我正在使用 Debezium 0 7 5 MySQL 连接器 并且我试图了解如果我想使用以下选项更新此配置 最好的方法是什么table whitelist 假设我创建了一个连接器 如下所示 curl i X POST H Accept ap
  • 使用 kafka java api 的 Avro 序列化器和反序列化器

    Kafka Avro 序列化器和反序列化器无法工作 我尝试使用 kafka 控制台消费者消费消息 我可以看到发布的消息 public class AvroProducer
  • Kafka Streams - 如何扩展 Kafka 存储生成的变更日志主题

    我有多个冗余应用程序实例 它们想要使用主题的所有事件并独立存储它们以进行磁盘查找 通过rocksdb 为了便于论证 我们假设这些冗余消费者正在服务无状态 http 请求 因此 负载不是使用 kafka 共享的 而是使用 kafka 将数据从
  • 当我重新运行 Flink 消费者时,Kafka 再次消费最新消息

    我在用 Scala 编写的 Apache Flink API 中创建了一个 Kafka 消费者 每当我从某个主题传递一些消息时 它就会及时接收它们 但是 当我重新启动使用者时 它不会接收新的或未使用的消息 而是使用发送到该主题的最新消息 这
  • 为什么我无法从外部连接到 Kafka?

    我在 ec2 实例上运行 kafka 所以amazon ec2实例有两个ip 一个是内部ip 第二个是外部使用的 我从本地计算机创建了生产者 但它重定向到内部 IP 并给我连接不成功的错误 任何人都可以帮助我在 ec2 实例上配置 kafk

随机推荐

  • 在 Android Studio 或 IntelliJ 中将未使用的导入报告为错误

    Android Studio 中是否有任何方法 设置可以将 java 文件中未使用的导入报告为错误 在 Eclipse 中 lint 很容易将此报告为错误 适用于 Android Studio 和 IntelliJ 你可以去File Set
  • iOS 崩溃分析和报告 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 了解 javascript 全局命名空间和闭包

    我正在尝试提高对 javascript 中的全局命名空间的理解 我对以下几件事感到好奇 是否存在一个 GOD 即父 对象 所有对象 因为除了基元之外的所有事物都是对象 都要回答 如果是这样 该对象将是 窗口 吗 为什么在全局范围内使用变量
  • 选择取消按钮时如何重置 DatePicker

    我的应用程序中有一个 datePicker 对话框 当我选择日期时效果很好 但是 如果在对话框中更改日期然后按取消 原始编辑文本将保持不变 但日期选择器仍然具有取消之前的日期 我想确保每次进入日期选择器时 它都会设置 EditText 中的
  • 当键重复时如何使用 Java Stream API 添加 Map 的内部元素

    我有一个清单List
  • 如何从非活动类中检索上下文?

    我已经发现一个答案 https stackoverflow com questions 4177731 android how to call method from another class without passing contex
  • Symfony 2 调试工具栏未显示

    Symfony 调试工具栏不显示 我正在 app dev php 环境中运行该网站 config dev yml 文件包含以下行 web profiler toolbar true intercept redirects false app
  • 使用 jQuery 动态添加/删除输入字段

    我想使用 jquery 构建动态添加 删除表单 它应该看起来像 姓名类型需要吗 示例输入 姓名类型需要吗 托尼管理员选中 复选框 删除 我得到的是添加 删除输入框的示例 它如何转换为我的想法 我必须使用多列表吗 谢谢你的好心帮助 h1 jQ
  • 如何避免用户删除他的会话

    用例 目前 我正在尝试构建一个页面 用户可以在其中对内容进行投票 赞成 反对票 类似于StackExchange网络上的功能 但用户不需要自己注册即可对内容进行投票 所以这将是一种 匿名 投票页面 它是用 Laravel5 构建的 并使用
  • CModel 与 CFormModel 与 CActiveRecord

    我正在 yii 中构建一个数据库密集型应用程序 所以性能和安全性自然是一个值得关注的问题 除此之外 表单验证也是一个主要标准 为了安全起见 我计划对所有 Sql 查询使用参数绑定 对于验证 我想使用 Yii 提供的验证器 而不是推出我自己的
  • 如何为WCF服务库创建wsdl文件?

    我有一个 WCF 服务库项目 我正在尝试通过在 Visual Studio 中运行 WCF 测试客户端 按下 F5 来启动 WCF 测试客户端来生成 wsdl 文件 它启动了 WCF 测试客户端 但显示 无法添加服务 服务元数据可能无法访问
  • OpenCV:DetectMultiScale() 给出了太多的物体点

    我用以下方法训练了我的电脑opencv traincascade一整天使用 6000 多张类似于以下的正面图像来检测 2 欧元硬币 现在 我刚刚尝试运行一个简单的 OpenCV 程序来查看结果并检查文件cascade xml 最后的结果非常
  • 为什么我的

    这个问题在这里已经有答案了 我有一个正在尝试使用 Flexbox 创建的导航 我希望有一个最大高度 并且有 li 当没有足够的空间时推入新列 我已经显示了 ul 内联柔性 这 li 正在跳到一个新专栏 但是 ul 不随 li 造成溢出效果
  • 如何在禁用 StyleCop 代码分析的情况下创建 Visual Studio 构建配置?

    Question 我已经安装了StyleCop http stylecop codeplex com 现在源代码中到处都是 StyleCop 的波浪线 现在 我希望能够暂时启用和禁用 StyleCop 的分析 我本来期望有一个复选框显示 禁
  • 如何成功传递字符串数组作为参数alamofire

    我有一个接受字符串数组作为参数的端点 但我无法让它与 alamofire 一起使用 我用邮递员测试我的端点 它工作正常 即使在浏览器中也是如此 但是使用 alamofire 它会失败并且只返回整个内容 就好像我没有输入任何参数一样 func
  • Parallels Extensions“Extras”仍然有价值吗?

    The 任务 Parallels Extras 扩展 http blogs msdn com b pfxteam archive 2010 04 04 9990342 aspx于 2010 年发布 此后没有发布任何更新 我将此代码发布为 D
  • Rails中如何管理非自增主键?

    在使用 Rails 时 我有很多情况希望有一个非自动增量主键 示例 我在 A 和 B 之间有一对一的关系 B 描述了添加到 A 的一些特定功能 因此没有 A 就无法存在 所以我们有 A有一个BB 属于 A 自然的想法是将 B A id 作为
  • 在Linux中用Java代码执行FFmpeg命令的问题

    我执行此操作时遇到问题ffmpeg我的java代码中的命令 ffmpeg i sample mp4 i ad mp4 filter complex 0 v trim 0 15 setpts PTS STARTPTS v0 1 v trim
  • 如何使用jackson在java中解包和序列化java地图?

    我有一颗这样的豆子 class Foo private Map
  • vert.x 事件总线可以取代 Kafka 吗?

    我正在评估 vert x 框架 看看是否可以减少使用 Spring Boot 开发的微服务之间基于 Kafka 的通信 问题是 我可以更换吗 带有 vert x 事件总线的 Kafka 和 带有基于 vert x 的 verticle 的