Kafka的介绍


一、介绍

  • kafka是一个分布式的发布订阅消息系统
  • 基于Zookeeper协调
  • 最初由Linkedin公司开发,于2010年贡献给了Apache基金会并成为顶级开源项目
  • Kafka的核心是由Scala语言编写,Kafka的客户端库使用Java语言编写

二、消息队列通信的模式

  1. 点对点模式
    • 消息持久化到一个队列中
    • 一个或多个消费者消费队列中的消息,消息只能被消费一次,当一个消费者消费完成一条消息后就会删除该消息
  2. 发布订阅模式
    • 消息被持久化到一个topic中
    • 与点对点消息系统不同的是,消费者可以订阅一个或多个topic,消费者可以消费该topic中所有的数据,同一条数据可以被多个消费者消费,数据被消费后不会立马删除
    • 在发布-订阅消息系统中,消息的生产者称为发布者,消费者称为订阅者

三、特性

  1. 高吞吐量、低延迟:kafka每秒可以处理几十万条消息,它的延迟最低只有几毫秒
  2. 可扩展性:kafka集群支持热扩展
  3. 持久性、可靠性:消息被持久化到本地磁盘,并且支持数据备份防止数据丢失
  4. 容错性:允许集群中节点失败(若副本数量为n,则允许n-1个节点失败)
  5. 高并发:支持数千个客户端同时读写

四、使用场景

  1. 日志收集:公司可以用Kafka可以收集各种服务的log,通过kafka以统一接口服务的方式开放给各种消费者
  2. 消息系统:解耦生产者和消费者、缓存消息
  3. 用户活动跟踪:Kafka经常被用来记录web用户或者app用户的各种活动,如浏览网页、搜索、点击等活动,这些活动信息被各个服务器发布到kafka的topic中,然后订阅者通过订阅这些topic来做实时的监控分析
  4. 运营指标:Kafka也经常用来记录运营监控数据。包括收集各种分布式应用的数据,生产各种操作的集中反馈,比如报警和报告

五、核心概念

  1. Broker

    • 1个Broker就是1个kafka节点,多个Broker组成1个kafka集群
    • 每个kafka集群内的Broker都有一个唯一的id:broker.id
  2. Producer

    • 生产者
    • 负责生产消息
  3. Consumer

    • 消费者
    • 负责消费消息
  4. Consumer Group

    • 消费者组
    • 由1个或多个消费者组成
    • 1个Partition的数据只能被消费者组中的某一个消费者消费,不能被组内多个消费者消费。但是1个消费者组的消费者可以消费多个Partition的数据
    • 消费者组内消费者的数量和Partition的关系,例如有3个Partition
      • 1个消费者:该消费者消费所有Partition
      • 2个消费者:1个消费者消费2个Partition,1个消费者消费1个Partition
      • 4个消费者:3个消费者消费3个partition,1个消费者空闲
      • 最优的设计就是消费者组下的消费者数量等于分区数量,效率最高
    • 消费者组之间是相互独立的,互不影响
  5. Topic

    • 消息的主题
    • 可以理解为消息的分类
    • 在每个Broker上可以创建多个topic
    • 用于建立生产者、消费者的订阅关系
  6. Partition

    • 消息分区
    • 是实现横向扩展和高并发的重要设计
    • 每个topic有1个或多个分区,每个分区是一个有序的队列,分区才是真正的存放消息的地方
    • kafka会把topic中的消息均匀的分布在所有的分区,每个分区存放的消息是不一样的。分区可以分布在不同的服务器上,也就是说, 1个topic可以横跨多个服务器,当topic中的消息越来越多,我们可以增加服务器也就是增加新的分区来实现横向扩展
  7. Replication

    • 副本
    • 是消息分区的备份
    • 是kafka实现故障转移,保证高可用的重要设计
    • 每个分区可以有1个或多个副本,副本数量要<=集群中broker的数量
    • 副本有两种类型:
      • leader :每个分区只有1个,负责处理读写请求
      • follower :每个分区有>=0个,不处理客户端的请求,只做备份,所有的follower都会从leader同步消息,保持与leader消息的一致。如果leader发生故障,其中的1个follower会被选举为新的leader
  8. Offset

    • 偏移量
    • 消息在parttion中的位置称为偏移量,是一个从0开始的整数
    • parttion中每新增1个新的消息offset就会递增1,如:1个parttion中,第1条消息的offset=0,第2条消息的offset=1
    • 每个消费者在消费信息后需要提交offset,以此来确定自己消费的进度。可以自动提交也可以手动提交
  • 17
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kimi-001

只想在有限的时间分享更多的知识

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值