kafka核心内容讲解

存储策略

每个topic有多个分区组成,而每个分区由多个segmet组成,每个segment由.log文件和.index文件组成
在这里插入图片描述index文件主要保存消息的偏移量,根据消息的偏移量以及消息大小快速定位到消息的位置
当查找消息时采用二分查找

生产者

分区原因

  • 方便在集群中扩展
  • 提高并发

分区原则
producer在发送消息时把每条消息包装成一个producerRecoder对象
在这里插入图片描述数据可靠性保障
为保障leader接收到数据之后,生产者可以继续发送数据,leader接收完数据在什么时候给生产者反馈(ack)?
一种是半数以上follower同步完之后发送ack,一种是全部follower同步完发送

注:第二种在0.8之前有两种决定:同步时间和同步的消息数量,在0.8之后只有同步时间决定
在这里插入图片描述生产者的acks参数提供三种配置给用户,让用户根据数据可靠性保障选取策略
acks=0 不管leader返回ack,不断发送数据,可能丢失数据
acks=1 只要leader写完数据就返回ack,不管follower是否同步完,可能丢失数据
在这里插入图片描述

acks=-1 全部leader和follower写完数据返回ack,可能重复数据
在这里插入图片描述
ISR中数据的一致性
HW保证存储一致性和消费一致性,不保证数据丢失和数据重复(acks)
在这里插入图片描述如何保证ExactlyOnce
在这里插入图片描述

消费者

两种分区分配策略

  • RoundRobin 按照消费者组划分,把所有主题看做整体然后轮询分配分区
  • Range(默认) 按照主题划分(先看谁订阅了主题再看是否属于同一个组)

当消费者组里的消费者增加或者减少的时候会重新触发分区分配策略

消费者偏移量保存在消费者组中

  • 保存在zookeeper中,offset是由group+topic+partition决定
  • 0.9开始默认吧offset保存在kafka的一个内置主题中,该topic为_consumer_offsets。要想消费该主题需要先修改consumer.properties配置文件添加exclude.internal.topics=false
    在这里插入图片描述

kafka高校读写数据原因

  • 顺序写磁盘 600M/s比随机写磁盘100K/s块
  • 零拷贝
  • 分布式

kafka事务

  • producer事务
    引入全局transactionId绑定pid,当producer挂掉之后,重新启动可以通过transactionId找回pid,再加上at least once(producer.properties里设置acks=-1)+幂等性=exactly once可以实现精准一次性写入到kafka集群同时解决跨分区跨会话问题
  • consumer事务
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值