Kafka

Kafka的基础架构
kafka
(一)简介
Producer:消息的生产者,向kafka broker 发送消息的客户端

consumer:消息的消费者,向kafka broker 订阅消息的客户端

Consumer Group(CG):消费者组,组内的每个消费者负责消费不同分区的数据,且一个分区只能被一个消费者消费;组与组之间互不影响。

Broker:每个kafka服务器就是一个broker,kafka集群是由多个broker组成,broker中又有多个topic

Partition:实现kafka的扩展性,一个大的topic分布到不同的broker上,一个topic又可以分成多个partition,每个partition都是一个有序的队列

Replica:kafka存在副本机制,一个topic 的每个分区都有多个副本,一个leader和多个follower

Leader:每个分区多个副本的主,所有数据的读写都是由leader完成的
Follower:实时从leader中同步数据,保持着与leader的同步;当leader发生故障,会从follower中选举出新的leader

(二)kafka的文件存储
kafka中 producer生产的数据存储在每个partition对应的log 文件中,其中的每条数据都保存着自己的offset,一个log文件 分成多个segment,对应着两个文件.index 和 .log

(三)分区原因和分区原则
原因:①方便再集群中的扩展
② 提高并发,可以以partition为单位进行读写

分区原则:① 指明partition的情况下,直接将指明的值作为partition值
②没有指明partition 但是有key的情况下,将key的hash值与topic的分区数进行取余得到partiton值
③ 没有指明partition 也没有key的情况下,随机产生一个整数,将这个整数与topic可用的partition总数进行取余获得partition值----------round-robin算法

(四)Kafka ACK 应答机制

服务器的ack的级别
0:producer 发送数据 不等落盘就返回ack,那么在数据发出之后,broker产生了故障,那么就会造成数据的丢失(At Most Once)
1:producer 等待broker的ack,leader将数据落盘之后返回ack,那么在落盘成功之前,leader发生了故障,会造成数据的丢失
-1(all):producer 等待broker 的ack,等待partition的leader和follower全部落盘成功后才返回ack,如果在follower同步完成后,broker发送ack之前,leader发生了故障,那么会造成数据的重复(At Least Once)

(五)Kafka的ExactlyOnce语义
0.11 版本,引入幂等性,幂等性是指,Producer 不论向broker发送多少次重复的数据,server端只会持久化为一条
(ack 级别设置为-1 )At Least Once + 幂等性 = Exactly Once

(六)消费者
① 消费者的消费方式
consumer采用pull(拉)模式从broker中读取数据。

② push模式和pull模式的对比
Push模式很难适应不同消费速率的消费者,因为消息的速率是由broker控制的;push的目的是以最快的速度传递消息,容易造成消费者来不及消费消息
Pull模式 consumer自主的控制消费消息的速率,还可以控制自己的消费方式 可以批量消费和逐条消费

(七)分区分配原则
kafka存在着两种分配策略:Range 和 Roundrobin

(八)offset的维护
在kafka0.9版本之前,consumer默认将offset保存在zookeeper中,0.9版本之后将offset保存在kafka的一个内置topic中,次topic为_consumer_offsets

(九) Kafka API
Producer 的发消息流程
producer
Producer的发送流程分成两个线程 main线程和sender线程
main线程: 经过interceptor ,serializer ,partitioner 将数据发往 一个共享变量RecordAccumulator
sender线程: 不断从RecordAccumulator 拉取消息发送到kafka broker;
与sender相关的两个参数
bacth.size —>数据累积到bacth.size大小才会发送消息
linger.ms---->如果没有达到batch.size sender等待linger.time 之后发送数据

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值