kafka学习

什么是kafka

kafka是分布式的,多副本的,多订阅者,多分区的基于zookeeper协调的分布式日志系统(也是MQ)

kafka的优点

  • 高吞吐量,低延迟:kafka每秒可以处理几十万条消息,延迟最低只有几毫秒
  • 高扩展性:集群支持热扩展
  • 持久性:kafka直接将消息持久化到本地磁盘,并且有备份防止数据丢失
  • 容错性:支持集群中的节点挂掉(最多n-1)
  • 高并发:一个节点支持数千个客户端同时读写

kafka结构

在这里插入图片描述
kafka架构包含四大组件:消费者,生产者,kafka集群,zookeeper集群
根据图中可以看出几个很重要的术语:

  • broker:kafka集群有很多个服务器节点,一个节点就叫一个broker
  • topic:每条发布到集群的消息都有一个类别,这个类别就是topic,其实就是将消息按照类别分类.topic是逻辑上的分类,同一个topic的消息可以在同一个broker上,也可以在不同的broker上
  • partition:即分区,一个topic会被划分成一个或多个分区,每个分区在物理上分别对应一个文件夹,该文件夹里存放着这个分区的所有文件和索引.当消息发布到topic,会根据分区策略将消息保存到分区末尾,属于顺序写磁盘
  • 分区策略:分区策略就是生产者将消息发送到哪个分区的算法.kafka提供了默认的分区策略,同时也支持自定义分区策略.kafka支持给每一个消息指定一个key,同一个key的消息会被发送到相同的分区上去,这个策略属于自定义策略的一种,被称为:按消息key保存策略,或者 key-ordering策略
  • offset:partition中的每条消息都被标记了一个序号,代表的是此消息在分区中的偏移量(我理解为下标),这个序号就是offset,分区中的每条消息都有唯一的offset,可以通过offset指定要消费的消息.
    正常情况下,offset是递增的,但是也可以自己定义offset来决定要读取哪条消息,可以理解为offset是由consumer控制的,消费者想消费哪条消息都可以,所以kafka broker是无状态的,不需要标记哪条消息被消费过
  • producer:生产者,生产者发送消息到指定的topic,消息根据分区策略添加到某个分区的末尾
  • consumer:消费者,从topic中消费数据’
  • consumer group:消费组,每个consumer都可以指定一个consumer group,不指定则属于默认.
    同一个topic的一条消息只能被一个consumer group的一个consumer消费,但是多个consumer group可以同时消费这一消息,这也是kafka实现广播和单播的方法.如果需要广播,则每个consumer group只定义一个consumer,如果需要单播,则只定义一个consumer group.
  • leader:每个partition都有副本,其中有且只有一个leader,leader负责对服务端的所有读写操作.
  • follower:follower不对外服务,只对leader进行备份,当leader挂掉,会从follower中选举出一个成为新的leader,如果follower挂掉或者加载慢,leader会把这个follower从ISR列表中删除,重新创建一个follower
  • rebalance:一个consumer group下的所有consumer互相协调消费工作. 一个topic会被分为多个分区,这些分区会被均匀的分配给这个consumer group下的所有消费者.
    rebalance表示重平衡,如果某个消费者挂了,kafka会重新分配分区给剩下的消费者.这也是kafka消费者端实现高可用的重要手段

对kafka架构的几点解释

  1. kafka集群包含若干个producer,若干个broker,若干个consumer group,以及一个zookeeper集群.kafka通过zookeeper控制集群,选举分区leader,以及当consumer group发生变化时进行rebalance
  2. 一个topic会被分成一个或多个分区,每个分区都会有分区副本,其中一个分区副本会被选举为leader,其他的作为follower,其中只有leader提供对外服务,follower只对leader进行备份,当leader挂掉,follower中会重新选举出一个leader来支持对外服务
  3. kafka中被消费过的消息不会被删除,只是offset会默认递增,kafka中的消息只有在超过规定的时间后才会被删除,
 数据的保存时间(单位:小时,默认为7天)
log.retention.hours=168
  1. 点对点模式和订阅模式
    点对点模式:生产者发送消息到queue中,queue支持存在多个消费者,但一条消息只能被一个消费者消费,消息被消费过后会被queue删除.
    订阅模式:生产者发送消息到topic,topic可以被所有消费者订阅,并且topic中的消息可以被所有消费者消费.
  2. 消费端pull和push
    push:broker主动将消息推送给consumer.
    优点:不需要消费者额外开启线程监听中间件,节省开销
    缺点:消费者消费消息的能力不一样,容易造成部分消费者空闲,部分消费者拥堵的情况
    pull:消费者主动向消息中间件拉取消息
    缺点:需要开启额外线程监听消息中间件,增加性能开销
    优点:消费者可以根据自己的消费能力自主的拉取消息

参考文章:https://mp.weixin.qq.com/s?__biz=MzU1NDA0MDQ3MA==&mid=2247483958&idx=1&sn=dffaad318b50f875eea615bc3bdcc80c&chksm=fbe8efcfcc9f66d9ff096fbae1c2a3671f60ca4dc3e7412ebb511252e7193a46dcd4eb11aadc&scene=21#wechat_redirect

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值