草庐IT

Kafka 负载均衡在 vivo 的落地实践

作者|vivo互联网服务器团队-YouShuo副本迁移是Kafka最高频的操作,对于一个拥有几十万个副本的集群,通过人工去完成副本迁移是一件很困难的事情。CruiseControl作为Kafka的运维工具,它包含了Kafka服务上下线、集群内负载均衡、副本扩缩容、副本缺失修复以及节点降级等功能。显然,CruiseControl的出现,使得我们能够更容易的运维大规模Kafka集群。备注:本文基于Kafka2.1.1开展。一、 Kafka负载均衡1.1生产者负载均衡Kafka客户端可以使用分区器依据消息的key计算分区,如果在发送消息时未指定key,则默认分区器会基于roundrobin算法为每条

Kafka 负载均衡在 vivo 的落地实践

作者|vivo互联网服务器团队-YouShuo副本迁移是Kafka最高频的操作,对于一个拥有几十万个副本的集群,通过人工去完成副本迁移是一件很困难的事情。CruiseControl作为Kafka的运维工具,它包含了Kafka服务上下线、集群内负载均衡、副本扩缩容、副本缺失修复以及节点降级等功能。显然,CruiseControl的出现,使得我们能够更容易的运维大规模Kafka集群。备注:本文基于Kafka2.1.1开展。一、 Kafka负载均衡1.1生产者负载均衡Kafka客户端可以使用分区器依据消息的key计算分区,如果在发送消息时未指定key,则默认分区器会基于roundrobin算法为每条

Topic 与 Broker 之间的秘密

接下来就一起看看在Pular里,topic和broker之间到底如何相处的吧。TopicDiscoveryPulsar作为多租户消息系统,具有层级命名空间,这个在之前我们也提到了「Tenant&Namespace」相关概念。除去前两层,第三层就是topic。那么Pulsar如何把topic分配给brokers呢?首先看图理解一下层次化结构。image.png一个Pulsarinstance内部,有很多租户,就好比一个公司有多个不同的部门。往下细分又有不同的业务线(对应namespace),业务线里可能又有不同的主题(对应topic)。所有的topic在Pulsar集群里以树状结构连存,所以to

Topic 与 Broker 之间的秘密

接下来就一起看看在Pular里,topic和broker之间到底如何相处的吧。TopicDiscoveryPulsar作为多租户消息系统,具有层级命名空间,这个在之前我们也提到了「Tenant&Namespace」相关概念。除去前两层,第三层就是topic。那么Pulsar如何把topic分配给brokers呢?首先看图理解一下层次化结构。image.png一个Pulsarinstance内部,有很多租户,就好比一个公司有多个不同的部门。往下细分又有不同的业务线(对应namespace),业务线里可能又有不同的主题(对应topic)。所有的topic在Pulsar集群里以树状结构连存,所以to

从RocketMQ的Broker源码层面验证一下这两个点

本篇博客会从源码层面,验证在RocketMQ基础概念剖析,并分析一下Producer的底层源码中提到的结论,分别是:Broker在启动时,会将自己注册到所有的NameServer上Broker在启动之后,会每隔30S向NameServer发送心跳之前的文章中,我们知道了RocketMQ中的一些核心概念,例如Broker、NameServer、Topic和Tag等等。Producer从启动到发送消息的整个过程,从源码级别分析了Producer在发送消息到Broker的时候,是如何拿到Broker的数据的,如何从多个MessageQueue中选择对应的Queue发送消息。但是由于篇幅原因,文章开头

从RocketMQ的Broker源码层面验证一下这两个点

本篇博客会从源码层面,验证在RocketMQ基础概念剖析,并分析一下Producer的底层源码中提到的结论,分别是:Broker在启动时,会将自己注册到所有的NameServer上Broker在启动之后,会每隔30S向NameServer发送心跳之前的文章中,我们知道了RocketMQ中的一些核心概念,例如Broker、NameServer、Topic和Tag等等。Producer从启动到发送消息的整个过程,从源码级别分析了Producer在发送消息到Broker的时候,是如何拿到Broker的数据的,如何从多个MessageQueue中选择对应的Queue发送消息。但是由于篇幅原因,文章开头

RocketMQ基础概念剖析&源码解析

TopicTopic是一类消息的集合,是一种逻辑上的分区。为什么说是逻辑分区呢?因为最终数据是存储到Broker上的,而且为了满足高可用,采用了分布式的存储。这和Kafka中的实现如出一辙,Kafka的Topic也是一种逻辑概念,每个Topic的数据会分成很多份,然后存储在不同的Broker上,这个「份」叫Partition。而在RocketMQ中,Topic的数据也会分布式的存储,这个「份」叫MessageQueue。其分布可以用下图来表示。这样一来,如果某个Broker所在的机器意外宕机,而且刚好MessageQueue中的数据还没有持久化到磁盘,那么该Topic下的这部分消息就会完全丢失