apache-kafka - 用于微服务的消息队列(如 RabbitMQ)或 Kafka?
问题描述
我们正在启动一个新项目,我们正在评估微服务之间异步通信的技术堆栈?为此,我们正在考虑使用 RabbitMQ 和 Kafka。
任何人都可以阐明在这两者之间做出决定的关键考虑因素吗?
谢谢
解决方案
选择取决于您的微服务到底需要什么。与其他相比,两者都有不同的东西。
简而言之,RabbitMQ
谁是球员:
- 消费者
- 出版商
- 交换
- 路线
流程从 Publisher 开始,它向 Exchange 发送消息,Exchange 是一个中间件层,知道将消息路由到队列,消费者可以定义他们从哪个队列消费(通过定义绑定),RabbitMQ 将消息推送到消费者,一旦消费和确认到达,消息就会从队列中删除。该系统中的任何部分都可以横向扩展:生产者、消费者以及 RabbitMQ 本身都可以集群化,并且具有高可用性。
卡夫卡
谁是球员
- 消费者/消费者群体
- 制片人
- 卡夫卡源连接
- 卡夫卡水槽连接
- 主题和主题分区
- 卡夫卡流
- 经纪人
- 动物园管理员
Kafka 是一个强大的系统,并且在游戏中有多个成员。但是一旦你很好地理解了流程,这将变得易于管理和使用。生产者向主题发送消息记录,主题是发布记录的类别或提要名称,可以对其进行分区,以获得更好的性能,消费者订阅主题并开始从中提取消息,当主题分区,然后每个分区都有自己的消费者实例,我们将同一消费者的所有实例称为消费者组。在 Kafka 中,消息始终保留在主题中,即使它们被消耗(限制时间由保留策略定义)另外,Kafka 使用顺序磁盘 I/O,这种方法提高了 Kafka 的性能并使其成为队列实现中的领导者选项,并且是大数据用例的安全选择。
如果需要,请使用 Kafka
- 时间旅行/持久/提交日志
- 同一条消息的许多消费者
- 高吞吐量
- 流处理
- 可复制性
- 高可用性
- 留言顺序
如果需要,请使用 RabbitMq:
- 灵活的路由
- 优先队列
- 标准协议消息队列
推荐阅读
- javascript - Bootstrap Validator - RegExp weird behavior
- java - What is the best practise in spring rest for coding Id based and name based API
- c++ - How to check whether rectangle is golden rectangle using Fibonacci and recursion function?
- java - Android libgdx: NullPointerException on SQLiteOpenHelper database
- mysql - 如果 MySQL 存储过程中的条件未正确评估
- excel - Waterfalls in Excel
- java - Map.computeIfPresent() 在 Java 中初始化一个 List
- xml - XSLT - XML 转换
- c# - C#6 中的长字符串插值行不支持 Tab、CR 和 LF
- android - Add number of logins by user on firebase