kafka 学习笔记1

Event streaming is the digital equivalent of the human body’s central nervous system

概述

分布式基于发布/订阅模式的消息队列,应用于大数据实时处理领域。
1 6 3005

优点

  1. 解耦 消费者生产者不再是直接的关系 有中间介质
  2. 异步 生产者不需要等待消费者消费
  3. 削峰 因为生产者消费者处理事件不再是即时性的所以可以错峰处理

两种模式

  1. 点对点 消费者主动拉取消息 问题:消费者无法得知消息队列是否有消息需要消费
  2. 发布订阅 一对多 消息队列信息给消费者 问题:消息队列无法感知消费者消费速度

结构

在这里插入图片描述

  1. broker 主题 消息队列分区 ,一台 kafka 服务器就是一个 或多个broker。一个集群由多个 broker 组成。一个 broker,可以容纳多个 topic。
  2. Topic 逻辑:可以理解为一个队列消息的分类,生产者和消费者面向的都是一个 topic;
  3. Partition物理分区:为了实现扩展性实现负载,一个非常大的 topic 可以分布到多个 broker(即服务器)上,一个 topic 可以分为多个 partition,每个 partition 是一个有序的队列
  4. follower 副本 leader主要 生产者消费者只找leader
  5. consumer group 消费者组 某一个分区只能被同一个消费者组里的消费者消费
  6. zookeeper 如果kafka要集群要用一套zk保存集群的元信息

生产者和消息队列工作流程

在这里插入图片描述

  1. follow主动向leader拉数据

负载均衡

  1. producer 可以轮训自定义发送到哪一个partition
  2. producer发送到同一个partition,消费者从同一个地方消费

分片和索引机制

生产者生产的信息不断增加在log文件末尾,为防止log文件过大导致数据定位效率低下。

segment

每个partition分为多个segment,每个segment对应两个文件.index索引和.log数据和 timeindex索引文件
在这里插入图片描述

message结构

1、 offset:offset是一个占8byte的有序id号,它可以唯一确定每条消息在parition内的位置!

2、 消息大小:消息大小占用4byte,用于描述消息的大小。

3、 消息体:消息体存放的是实际的消息数据(被压缩过),占用的空间根据具体的消息而不一样。

文件夹命名规则

topic名称+分区序号

分区的原因

  1. 方便集群中扩展
  2. 可以提高并发 为p为单位读写

分区原则

将producer发送的数据封装成一个ProducerRecord对象

  1. 指明 partition 的情况下,直接将指明的值直接作为 partiton 值;
  2. 没有指明 partition 值但有 key 的情况下,将 key 的 hash 值与 topic 的 partition
    数进行取余得到 partition 值;
  3. 既没有 partition 值又没有 key 值的情况下,第一次调用时随机生成一个整数(后
    面每次调用在这个整数上自增),将这个值与 topic 可用的 partition 总数取余得到 partition
    值,也就是常说的 round-robin 算法
可靠性保证

每次p收到producer发送的数据后,想producer发送ack,则进行下一轮发送否则重新发送

查找策略

利用segment+有序offset+稀疏索引+二分查找+顺序查找等多种手段来高效的查找数据!

删除策略

从broker删除变得棘手,因为他不知道消费者是否消费这个信息,所以他将给予时间的sla应用于保留策略,超过一定事件后会删除

  1. n天前删除
  2. 暴露最近的MGB
副本同步策略

在这里插入图片描述
使用第二种并优化方案。ISR

同步副本 ISR

Leader 维护了一个动态的 in-sync replica set (ISR),意为和 leader 保持同步的 follower 集
合。当 ISR 中的 follower 完成数据的同步之后,leader 就会给 follower 发送 ack。如果follower
长时间 未 向 leader 同 步 数 据 , 则 该 follower 将 被 踢 出 ISR , 该 时 间 阈 值
replica.lag.time.max.ms 参数设定。Leader 发生故障之后,就会从 ISR 中选举新的 leader。

ack 三种可靠性级别

0 producer 不等待broker的ack
1 最多发送一次 不会重复 会丢 只确保leader成功
-1 不丢失 有重复 向所有follower都完成与leader同步才发送下一条

数据一致性问题

log文件中的hw和leo
hw leader和follower最大同步位置
Leo:所有副本最后一个位置

exactoy once 不重复也不丢失

幂等性 producter在初始化时分配一个pid 发往同一partition的信息附带sequence number ,broker会对其做缓存

消费者

多个消费者组成一个消费者组 有一个id,同一个消费者组的消费者可以洗哦啊飞统一topic下的不同分区的数据,但不会多个同一个组的消费者消费同一分区的数据

消费方式

consumer采用pull方式从broker 拉取数据

分区分配策略

  1. roundRobin
  2. Range

问题

zap协议

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值