文章插图
> A producer sending messages (with possibly different entity/user ids) to different partitions
你为什么要这个?这是因为分区中的每条消息都保证按时间顺序排列 。因此,按顺序消耗 。
文章插图
> Messages being consumed in order from partitions.
进入该分区的每条消息都在该分区中排序 。即使有多个用户(或其他实体)映射到相同的分区(红色/绿色) 。您仍然可以为每个订购用户消息 。
文章插图
> Regardless of why different message types are mApped into single partitions, they maintain order
将订购来自分区的消息 。但分区可以随时发出消息 。因此,主题,不要保证订单 。这有点奇怪 。我知道 。下面,请注意两个分区如何发送自己的消息 。但是,无论其他分区如何,他们都这样做 。他们仍然保持自己的信息订单 。
文章插图
> Two perfectly valid scenarIOS. Each partition maintains order for its own messages.
如果您的消费者依赖于消息订单(跟踪用户点击在您的站点中),则您将希望更多地查看这些主题分区策略(这是本文的范围) 。如果没有,默认策略将为您工作 。
让我们现在缩小一下并了解Kafka如何做到这一点 。
基础设施如果我们退后一步,让我们看看我们的第一个图表 。什么是kafka云?
文章插图
> Two services communicating via Kafka
它实际上是一组服务器 。我们将看到的第一个是Kafka群集的头部,Zookeeper 。
文章插图
> Zookeeper routing traffic in and out of the Kafka cluster.
zookeeper管理您的所有主题和分区 。它基本上维护了一组Kafka群集节点,其中存储主题和分区 。这些节点是构成Kafka集群的单独机器(例如,EC2实例) 。
文章插图
> Zookeeper maintaining a set of nodes
如果我们有两个主题,每个主题都有两个分区,这是我们之前可能以前可视化的 。请注意,分区与现在的主题相同 。
文章插图
> Two topics with two partitions
我们将编号分区以帮助稍后识别它们 。
文章插图
> Numbered partitions
现在,让我们看看这些主题如何适应我们的Kafka集群 。让我们从一个主题开始 。主题A.对于此示例,其分区#1将放在每个节点上 。
文章插图
> Topic A, Partition #1
您不必在每个节点上放置分区 。你可能不想 。它会变得昂贵 。另一方面,您将拥有一个有弹性的系统 。让我们看看为什么 。
如果消息进入,则会将其路由到其中一个节点中的分区,称为领导者 。zookeeper为领导者分配 。
文章插图
> A message sent to the leader.
Zookeeper将像以前一样将消息发送给消费者 。它还将将消息复制到分区的其他副本 。追随者 。
文章插图
> Sending the message to the consumer and duplicating it on all of the followers
现在,分区的每个副本都包含我们的消息!如果一个节点拆卸或爆炸,Zookeeper将重新分配给不同的节点 。
文章插图
> Message in each partition copy
这是与我们添加的彼此分区相同的过程 。我们现在将在我们的群集中保留两个分区副本 。
文章插图
> Two partition copies
现在让我们在另一个分区#2中添加主题A.它也只是两个副本 。现在,主题A完全在我们的集群中!两个分区都被复制和维护 。
文章插图
> Partition #1 and #2 in our cluster.
现在,让我们在主题B的分区中添加分区 。我们现在假设两个副本 。这是我们的Kafka集群与两个主题!我们已经完成了!
推荐阅读
- Docker可视化管理:Portainer中文版
- Serial Studio 分享一个多功能串口数据可视化工具
- Excel用REPT函数做可视化,实在太帅了
- Linux查看硬件信息超强命令sar,以及可视化工具ksar
- Kafka生产者哪些重要的参数是我们需要注意的?
- 30分钟带你了解「消息中间件」Kafka、RocketMQ
- 10分钟快速搭建小程序管理后台,云开发CMS搭建可视化后台
- 一个Golang版丝滑的可视化库
- Kafka实时API探秘
- Python中的时间序列数据可视化的完整指南