Kafka通过使用“long polling”等待模式的方式解决了这个问题 。简而言之,如果分区上没有数据,Kafka 不会返回空响应 。相反,broker保持连接并等待数据进入,然后再将其返回给消费者 。前言Kafka 一开始是LinkedIn这家公司研发的技术,它是一种高吞吐量的分布式发布订阅消息系统,现在已成为大多数公司使用的技术,我们公司也不例外 。那么你对kafka的了解有多少呢?那么本文就带你过一过kafka中的一些关键要点 。
为什么我们需要Kafka?
文章插图
订单发生时通知其他服务
在我们深入研究之前,有必要重新审视一下 Kafka 最初被发明的原因 。
想象一下为一家电子商务公司维护一组微服务 。
下订单时,订单服务要通知很多服务,如下:
- 钱包服务从用户账户中扣除金额
- 仓库服务扣除物品的库存数量
- 物流服务发货
订单服务器需要做以下事情:
- 跟踪都通知了谁
- 确保所有其他服务确实收到并处理
- 和其他服务建立直接的连接和处理不同的响应
因此,Kafka就很好的解决这样的问题 。
消息队列与发布订阅
文章插图
订单服务器只是将消息发布到 Pub-Sub/Message Queue
消息队列和发布订阅系统都是解决上述问题的关键 。
也就是说,不是让订单服务维护直接和各种系统打交道,而是将事件发布或者推送到中间队列中,对队列感兴趣的服务器(通常称为消费者)订阅队列并相应地消费事件 。
那么消息队列和发布订阅系统有什么区别呢?
消息队列消息队列是一种类似队列的结构,其中消息被发布并且仅被消费一次 。这对于非幂等的进程很方便,事件应该只由一个消费者处理,RabbitMQ 最初被设计成一个消息队列 。
发布-订阅系统另一方面,发布订阅系统允许多个消费者多次使用一条消息 。订单事件被多个系统订阅消费,所以更适合发布订阅系统模式 。Kafka 被设计为既是消息队列又是发布订阅系统 。
Kafka组件为了充分理解 Kafka 的工作原理,让我们剖析 下Kafka 的各个组件 。
Kafka Broker 和集群
文章插图
Kafka 代理和集群
Kafka 只不过是一个管理数据发布和消费的服务 。
一个Kafka Broker就是一个Kafka服务 。维护同一组主题的一组Broker称为 Kafka 集群 。
发布者Publisher
文章插图
发布者发布到 Kafka 代理
将数据发布到 Kafka Broker的服务称为发布者 。我们之前提到的Order服务是发布者的一个例子 。
消费者Consumer
文章插图
消费者从 Kafka 代理消费
另一方面,消费者是订阅和消费来自 Kafka 主题的数据的服务 。
在我们前面的示例中,Wallet服务器、Warehouse服务器和Logistic服务器充当Order主题的消费者 。
主题Topic
文章插图
Kafka 代理中的不同主题
Kafka 代理维护不同类型的事件,例如:
- 订单创建事件
- 订单取消事件
- 缺货事件
发布到 Kafka 时,发布者指定消息应发布到的主题 。
主题是一个只能追加的日志 。将消息附加到主题类似于将数据附加到队列,它需要 O(1) 常数时间,因此速度非常快 。
分区Partition
文章插图
主题被分片成分区
主题是存储在 Kafka Broker上的追加的日志 。
随着消息数量的增加,Broker在特定主题上存储的数据量是有限的,那怎么办呢?
推荐阅读
- 只需一篇就让你详细了解 Java 中 so 文件的加载原理
- 绿松石|绿松石赌石小九九:劝你别玩
- 怎么改pdf里面的文字,快速修改pdf内容方法
- 吴奇隆|“播前无人知晓,播出后大火”的五部剧,你若都看过,我真佩服你
- 虚拟主持人是怎么做的,带你揭秘虚拟主持原理
- 网站线下推广方案,教你如何做线下推广
- 诺顿企业版无法在win10上安装。关于诺顿企业版?
- 如何使用icloud备份,一文教你玩转icloud
- 建盏|论色泽,论形意,论用境 带你了解建盏
- 吴昕|著名作家痛批杜海涛:你盯着吴昕的肚子干嘛,管好自己老婆