kafka 架构 工作流程 分区策略

1.Kafka的架构图

名词解释:

Producer:消息生产者.kafka发送的一端

Consumer:消息消费者,向kafka取数据的一端

Consumer Group:消费者组,有多个consummer组成.组内每个消费者负责消费不同分区的数据.

Broker: 每台服务器就是一个broker,也就是一个节点.包含多个topic.

Topic:消费主题,消费者和生产者都是面向的是topic.

Partition:一个大的topic可以分为多个partition,每个partition内部都是有序的.

Replic:partition的副本.为了保证集群的某个节点发生故障时,该节点的partition数据不丢失,且kafka正常的工作.kafka提供副本机制,一个topic的每个分区都有若干个副本,一个leader和多个follower.

2.Kafka的工作流程

一个broker中多个topic

一个topic中可以有多个partition

一个partition多个segment

一segment有.log和.index,这两个文件位于一个文件夹下,该文件夹的命名规则为:topic+分区号. “.index”文件存储大量的索引信息,“.log”文件存储大量的数据,索引文件中的元数据指向对应数据文件中message的物理偏移地址。

3.Kafka 分区策略(producer)

为了Producer发送的数据能可靠的到达指定的topic,topic的每个partition收到数据后,都会向producer发送ack,如果producer收到ack,就会继续发送数据,否则重新发.

  1. 副本数据同步策略

1)半数以上完成同步,就发送ack, 优点:延迟低 缺点:选举新的leader时,容忍n台节点的故障,需要2n+1个副本

2)全部完成同步,才发送ack 优点:选举新的leader时,容忍n个节点的故障,需要n+1个副本. 缺点:延迟高.

第一种方案会造成大量的数据的冗余,虽然第二种方案的网络延迟比较高,但是网络延迟对kafka的影响比较小.所以采用的是第二种方案.

 

  1. ISR(in-sync replica set (ISR)) 解决全部完成同步,才发送ack中某个follower因故障迟迟不能与leader同步.这个时候,这个故障的follower就会被踢出ISR.如果是leader发生故障,就会从ISR中选举leader.

参数设置:

replica.lag.time.max.ms  设置时间阈值

  1. ack应该机制

有些数据不是很重要的数据,能够容忍数据少量丢失,所以没必要等ISR中的follower全部接收成功.

因此,kafka提供了三种可靠性,用来让用户来权衡

 ack 参数配置

ack=0: producer不等待broker的ack,这种方式延时最低,broker收到没有写入磁盘就返回ack,当broker故障就有可能丢失数据.

ack=1: producer等待broker的ack,partition 的leader写入成功返回ack,如果follower在同步数据之前leader就故障,数据就会丢失.

ack=-1:producer等待broker的ack,partition的leader和follower全部成功写入.才会返回ack,但是如果在follower同步完成后,broker发送ack之前,leader发生故障那么会造成数据重复.

 

  1. Exacttly One: 将服务器的ack 级别设置为-1 保证producer到Server之间不会丢失数据这就是At least once的含义,0.11版本后引入了幂等性就构成了Exactly Once. 幂等性指的是 Producer不管想Server发送多少次重复数据,server只会持久化一条数据.

参数修改:

enable.idompotence=true

4.kafka分区(consumer端)

分区分配策略

一个consumer group中有多个consumer,一个 topic有多个partition,所以必然会涉及到partition的分配问题.

Kafka在consumer端有两种分配策略. 第一种:Roundrobin(轮询) 第二种:range

5.offset的维护

  Kafka 0.9版本之前,consumer默认将offset保存在Zookeeper中,从0.9版本开始,consumer默认将offset保存在Kafka一个内置的topic中,该topic为__consumer_offsets

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值