Kafka的常用术语
1.1Kafka的术语
1.1.1Record
kafaka是一个消息引擎系统发布的肯定就是消息了,就是Producer发布的消息主题
1.1.2Topic
kafka发布的消息对象,逻辑上的一个主题,常常和业务,场景相关
1.1.3Partition
1.什么事分区
kafka在创建topic的时候需要指定partition数,均匀分布在不同的Broker上,一般情况下Partition和Broker的数量是一致的。这样做的好处是 提升系统的伸缩性,提供了负载均衡的能力,也可以根据对分区做具体的操作。
2.kafak的分区策略
首先kafka想要自定义分区策略的时候需要实现kafka的Partitioner接口,这个接口仅仅定义了两个方法
partition(),close(),我们仅仅需要实现partition方法去定制我们需要的分区策略。
/**
* topic key keyBytes valueBytes都是消息数据
* cluster 是集群数据
* 我们可以充分利用这些信息对消息进行分区,计算出它要被发送到呢个分区上去
**/
int partition(String topic, Object key, byte[] keyBytes, Object value, byte[] valueBytes, Cluster cluster);
-
轮询策略
kafaka的默认分区策略,最大限度的保证消息平均的发送到各个分区上,也是默认的最合理的分区策略。
-
随机策略
代码实现随机分区策略
//实现partition接口重写partition方法 //先计算出所有的分区数 然乎随机地返回一个小于它的正整数 List<PartitionInfo> partitions = cluster.partitionsForTopic(topic); return ThreadLocalRandom.current().nextInt(partitions.size());
虽然随机策略也是保证消息到每个partition的概率是一样的,但是它仅仅是一个伪均衡,如何我们的项目需求是均匀分布,还是要使用轮询策略。
-
消息键值保存策略
very very very important的一个分区策略。
允许为每条消息定义消息键,简称为Key 相同的Key 会放在一个分区上
可以代表明确业务含义的字符串(客户代码,部门编号或者业务Id等)
List<PartitionInfo> partitions = cluster.partitionsForTopic(topic); return Math.abs(key.hashCode()) % partitions.size()
存在一种场景如果我们需要保证我们的Topic 的消息是完全有序的情况下,使用轮询和随机策略就是不能实现的,因为kafka 的消息仅仅是保证消息在每个分区上有序。这样大多数情况下我们会选择仅仅给当前的Topic创建一个partition,当时这样就丧失了kafka的最大优势,多分区的负载均衡和高吞吐量的功能。
这种情况下我们就可以使用消息键值保存策略指定多个分区,而且业务场景变化系统需要扩展的时候 ,都是比较方便高效的。而不是仅仅为了实现当前的功能去指定一个分区。
1.1.4Replic
kafka实现高可用的一种手段就是 Replication(备份机制)
每个partition 有多个 replica
- Leader(只有一个Leader Leader挂了后会从Follower 中选取一个 具体的选取策略和 配置有关)
- Follower(副本不提供对外的服务)
- Follower Replica 只做一件事,向领导者副本发送请求,请求Leader把最新生产的消息发送给她,这样来保持与Leader的同步
1.1.5Broker(Server端)
- cluster 由多个Broker组成
- 接收clients的请求
- 持久化消息
- Kafaka使用消息日志(Log)【磁盘上只能追加写(Append-only)消息的物理文件】来保存数据
- Log: 这样可以避免了缓慢的随机I/O操作 修改为性能较好的顺序I/O操作
- Log Segment (如果一直追加不删除的话磁盘,最终一定会消耗完磁盘的空间的,所以要定时的进行删除 通过Log Segment 机制)
- 一个Log可以分为多个Log Segment 消息会被追加到当前最新的日志段中,当然Log Segment是有大小限制的并且每个LogSegment的最大的size都是一致的。
- 删除 kafka的后台有定时任务会定期的检查老的Log Segment是否能够被删除,从而实现回收磁盘空间的目的。
- Kafaka使用消息日志(Log)【磁盘上只能追加写(Append-only)消息的物理文件】来保存数据
1.1.6 Clients
-
Producer
- 向Topic发布消息的客户端应用程序成为生产者
- 可以同时发布多个Topic消息
-
Consumer
- 订阅消息的客户端
- 可以同时订阅多个Topic
1.1.7Consumer Group
提升消费者端的吞吐量
CG会均衡的去消息订阅主题的Patition,一个Partition只能被消费者组中的一个Consumer Instance消费
1.1.8 consumer offset
消费者组记录consumer消费的索引位置
1.1.9offset
当前最新消息存储的位置
1.1.10Rebalance
让一个Consumer Group下所有的Consumer实例如何消费订阅Tioic下的所有分区达成共识的过程。
所有的Consumer Instance共同参与,完成订阅主题的分配。
Rebalacce的过程中所有的消费者实例不能消费任何消息,对Consumer的TPS影响很大。
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanejag
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
photoshop蒙版画笔没反应怎么办
PHP中文网 06-24