极客kafka学习——kafka核心技术与实战

1、kafka概念

kafka是消息引擎系统,也是分布式流处理平台。

Kafka 的三层消息架构:

  • 第一层是主题层,每个主题可以配置 M 个分区,而每个分区又可以配置 N 个副本。
  • 第二层是分区层,每个分区的 N 个副本中只能有一个充当领导者角色,对外提供服务;其他 N-1 个副本是追随者副本,只是提供数据冗余之用。
  • 第三层是消息层,分区中包含若干条消息,每条消息的位移从 0 开始,依次递增。

最后,客户端程序只能与分区的领导者副本进行交互。

2、结构

  • kafka发布订阅的对象是主题(topic),它可以为每个业务、每个应用甚至是每类数据都创建专属的主题。
  • 向主题发布消息的客户端应用程序称为生产者,订阅这些主题消息的客户端应用程序称为消费者。
  • 生产者和消费者统称为客户端。
  • kafka的服务端由多个Broker服务进程构成,它们负责接收和处理客户端发来的请求,以及对消息进行持久化。将不同的broker分散运行在不同的机器上,这样即使某台机器宕掉了,其它机器上的broker也依然能够对外提供服务(kafka高可用的手段之一)。
  • kafka另一个高可用手段是leader-follower备份机制,领导者副本提供服务,追随者副本则是请求领导者将最新生产的消息同步过来。每个分区可配置多个副本实现高可用。
  • 为了避免领导者累积了太多的数据导致单台broker机器无法容纳,kafka将主题划分成多个分区,每个分区都是一组有序的消息日志,分区编号从0开始,每条消息在分区中的位置信息通过分区位移offset来表示,假如一个生产者向同一个空分区中写了十条消息,那这十条消息的分区位移依次是0、1、2、…、9。

3、如何实现持久化

  • kafka使用消息日志(log)来保存数据,它的日志就是磁盘上一个只能追加写消息的物理文件,由于只能追加写入,所以避免了缓慢的随机IO操作,变成性能较好的顺序IO写操作(这也是kafka高吞吐量特性的一个重要手段)
  • kafka还需要定期的删除消息来回收磁盘,通过日志段(log segment)机制来删除:kafka将日志进一步细分成多个日志段,消息被追加写到最新的日志段中,当写满一个日志段后,会自动切分出一个新的日志段,并将老的日志段封存起来,kafka的后台通过定时任务来定期的检查老的日志段是否能删除,从而实现回收磁盘空间的目的。

4、消费组

  • 消费组指的是多个消费者实例组成一个组来消费一组主题。这组主题中的每个分区都只会被消费组里的一个消费者实例消费,其它消费者实例不能消费它。这样可以让多个消费者实例同时消费,提升整个消费端的吞吐量。
  • 如果消费组里某个实例挂了,kafka能够自动检测到,并将这个实例所负责的分区转给其它活着的消费者,也就是重平衡(Rebalance)。
  • 每个消费者通过消费者位移(consumer offset)来记录它当前消费到分区的哪个位置了,分区位移表示的是消息在分区里的位置,是不变的,即一旦消息成功写入到一个分区上,它的位移值就固定了。而消费者位移是变动的,它是消费者消费进度的指示器。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值