一文读懂kafka,应用场景,基本概念,工作原理

kafka应用场景

kafka是分布式消息系统,具有高吞吐量,可容错的发布-订阅消息系统。

应用场景:

  • 用户活动追踪
  • 日志聚合
  • 限流削峰

高吞吐率实现:

  • 顺序读写
  • 零拷贝
  • 批量发送
  • 消息压缩

kafka基本概念

  • Topic,相当于消息的一个主题,标签

  • Partition,一个topic可以有多个partition,一个partition对应系统上的一个到多个目录。一个topic的partition数量应该是broker的整数倍。

  • segment,一个partition有多个segment组成,每个segment文件大小相等

    文件由.log 和 .index文件组成,.index是存放.log文件中消息的索引

    查看log文件:

    bin/kafka-run-class.sh kafka.tools.DumpLogSegments --files /tmp/kafka-logs-3/test-0/00000000000000000000.log --print-data-log

  • broker,kafka集群中的每个节点称为一个broker

  • producer,消息的生产者

  • consumer,消息的消费者,

    • 一个消费者可以消费多个topic的消息,
    • 一个消费者可以消费一个topic的多个partition的消息
    • 一个partition允许多个消费者同时消费
  • consumer group,消费者组,kafka保证一个消息只会被一个组中的某一个kafka消费。

  • replicas of partition, 分区副本,为了防止消息丢失而创建的分区的备份。

  • partition leader,每个partition有多个副本,而读写操作只能发生在leader上

  • partition follower,所有follower都需要从leader同步消息,Leader与follower是主备关系,而非主从关系。

  • ISR, In-Sync-Replicas,是指副本同步列表

    • AR,Assigned Replicas,在最初没有leader时,ISR=AR
    • OSR,Outof-Sync-Replicas
    • AR = ISR + OSR + Leader,ISR是存放在zk中的
  • offset,每条消息都有一个当前Partition下唯一的64字节的offset

  • broker controller, kafka集群中有一个broker会被选举出来,作为controller,负责管理整个集群的partition和replicas的状态

    只有broker controller会向zookeeper中注册watcher

  • 脑裂:(Brain Split),由于某种原因导致高可用集群中出现了两个master。zk的watcher机制及分布式锁会引发master的假死,从而导致脑裂。

  • HW(High Water-Mark)与 LEO(Log End Offset)

    • HW 是kafka消费者可以消费到的最高partition的偏移量,HW保证了kafka集群中消息的一致性。
    • LEO 是日志消息最后的偏移量
    • 对于partition leader中新写入的消息,是不能立即被消费者消费的,只有当ISR中所有的partition follower消费之后,更新HW,写入ISR,此时消息才能被消费者消费。HW的更新速度取决于那个性能最差的broker
  • zookeeper

    • zookeeper负则broker controller的选举
      • partition leader是由 broker controller负责选举的
  • Coordinator

    coordinator是用来管理消费者组的,是运行在每个broker上的group coordinator进程,主要负则offset的位移管理和rebalance,一个coordinator可以管理多个消费者组

  • rebalance

    当消费者组中的消费者数量发生变化,或者topic中的partition数量发生变化,会导致partition的重新分配,这个过程叫做Rebalance.

    rebalance可以给系统带来高可用性和伸缩性,但是在Rebalance期间,消费者是无法读取消息的,因此要避免不必要的Rebalance

    引发Rebalance的情形:

    • 消费者组中添加消费者
    • 消费者取消订阅,关闭或崩溃
    • 向一个topic中添加新的partition
    • 当有broker挂了
  • offset commit

    消费者从partition中取出一批消息放入buffer中进行消费,在规定的时间内(seession.timeout.ms)消费完消息后,会自动将其消费的commit提交给broker,broker可以判断哪些消息有被消费过,若在规定时间内没有消费完毕,其是不会提交offset的, 可以避免在Rebalance时重复消费。

注: 从kafka0.9开始,offset保存在brokers中,__consumers-offsets

kafka工作原理与流程

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值