加入收藏 | 设为首页 | 会员中心 | 我要投稿 新余站长网 (https://www.0790zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

由浅到深研究Kafka:生产者消息分区机制原理

发布时间:2021-06-05 10:59:58 所属栏目:大数据 来源:互联网
导读:在使用Apache Kafka生产和消费消息的时候,肯定是希望能够将数据均匀地分配到所有服务器上。 比如很多公司使用Kafka收集应用服务器的日志数据,这种数据都是很多的,特别是对于那种大批量机器组成的集群环境,每分钟产生的日志量都能以GB数,因此如何将这么
在使用Apache Kafka生产和消费消息的时候,肯定是希望能够将数据均匀地分配到所有服务器上。
比如很多公司使用Kafka收集应用服务器的日志数据,这种数据都是很多的,特别是对于那种大批量机器组成的集群环境,每分钟产生的日志量都能以GB数,因此如何将这么大的数据量均匀地分配到Kafka的各个Broker上,就成为一个非常重要的问题。
为什么分区?
Topic的概念,它是承载真实数据的逻辑容器,而在主题之下还分为若干个分区,也就是说Kafka的消息组织方式实际上是三级结构:主题-分区-消息。主题下的每条消息只会保存在某一个分区中,而不会在多个分区中被保存多份。官网上的这张图非常清晰地展示了。
Kafka的三级结构,如下所示:
由浅到深学习kafka:生产者消息分区机制原理
看到了这张图,我有几个问题,为什么Kafka要做这样的设计?为什么使用分区而不是直接使用多个Topic呢?
分区的作用
其实,分区的作用就是提供负载均衡的能力,或者说对数据进行分区的主要原因,就是为了实现系统的高伸缩性(Scalability)
不同的分区能够被放置到不同节点的机器上,而数据的读写操作也都是针对分区这个粒度而进行的,这样每个节点的机器都能独立地执行各自分区的读写请求处理,并且,我们还可以通过添加新的节点机器来增加整体系统的吞吐量
实际上分区的概念以及分区数据库早在1980年就已经有大牛们在做了,比如那时候有个叫Teradata的数据库就引入了分区的概念
在不同的分布式系统对分区的叫法也不尽相同:比如在Kafka中叫分区,在MongoDB和Elasticsearch中就叫分片Shard,而在HBase中则叫Region,在Cassandra中又被称作vnode
从表面看起来,它们实现原理可能不尽相同,但对底层分区(Partitioning)的整体思想却从未改变
除了提供负载均衡这种最核心的功能之外,利用分区也可以实现其他一些业务级别的需求,比如实现业务级别的消息顺序的问题
Kafka中的分区策略
Kafka中的分区策略,就是决定生产者将消息发送到哪个分区的算法
Kafka提供了默认的分区策略,同时,也支持自定义分区策略
默认分区策略
自定义分区策略
默认分区策略
轮询策略(Round-robin)
随机策略(Randomness)(已过时)
消息键策略(Key-ordering)
地理分区策略
轮询策略
也称Round-robin策略,即顺序分配
比如一个主题下有3个分区,那么第一条消息被发送到分区0,第二条被发送到分区1,第三条被发送到分区2,以此类推。当生产第4条消息时又会重新开始,即将其分配到分区0

(编辑:新余站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读