Kafka笔记(一)之kakfa工作流程

一.kafka基本架构术语

Producer(生产者):kafka生产者kafka broker 发消息的客户端;

Consumer(消费者):kafka消费者向 kafka broker 取消息的客户端;

Consumer Group (消费者组):消费者组是由多个Consumer组成。不同消费者组之间可以同时消费数据,同一个消费者组之间按顺序消费数据

Broker:一个borke可以容纳多个topic(主题),一个kafka服务器就是一个borker。即消息处理结点。

Topic(主题):就是一个消息队列,生产者和消费者都面向一个topic

Partition:一个topic由多个partition组成,每个partition都是一个有序的队列

segment(段):由index和data文件组成,两个文件成对出现,分别存储索引和数据。

offset:是用于定位 位于segment里的唯一消息 ,相当于索引值;它是确定kafka消费者在消费数据的进度位置。
 

二.kakfa工作流程

数据可靠性的保证:为保证 producer (生产者) 发送的数据,能可靠的发送到指定的 topic,topic 的每个 partition 收到producer 发送的数据后,都需要向 producer (生产者) 发送 ack(acknowledgement 确认收到),如果producer 收到 ack,就会进行下一轮的发送,否则重新发送数据。

ack副本数据同步策略:
    一:当follower半数以上同步完成,即可发送ack。
        优点:延迟低
        缺点:当选举新的leader时,如果有n台节点故障,需要2n+1台副本正常

    二:当follower全部完成同步,才发送ack(比较常用)
        优点:当选举新的leader时,如果有n台节点故障,需要n+1台副本正常
        缺点:网络延迟比较高

kafka选择了第二种方案:因为第一种方法会造成大量数据的冗余,而第二种方案虽然网络延迟比较高,但是对kakfa影响比较小

ISR机制:

问题提出:当我们选择第二种方案之后,如果其中有一个follwer发生故障,那leader要 一直等待,直到同步完成才能发送adc。

问题解决:Leader 维护了一个动态的 in-sync replica set 称(ISR),和 leader 保持同步的 follower 集合。当follwer长时间为向lader同步数据,该follower将被踢出ISR 。该时间的值是由replica.lag.time.max.ms参数设定。Leader发生故障之后就会从ISR中选举新的leader 

acks参数配置:
acks=0:有可能造成数据丢失
acks=1:也有可能造成数据丢失
acks=-1:不会造成数据丢失,但会造成数据重复(特殊情况下:当ISR中只有一个leader时也会造成数据丢失,这种情况很少见)

三.分区分配策略

上面提到一个消费者组(consumer group)有多个消费者(consumer),而一个主题(topic)有多个partition组成。所以就会涉及到Partition的分配问题,即确定那个 partition 由哪个 consumer 来消费。

kafka有两种分配策略:第一种是RoundRobin,第二种是Range。

RoundRobin:轮巡分配,按照每个分区挨个的分配给每个消费者
      好处:每个消费者之间插值比较小,最多差一个
      缺点:当前消费者 消费的订阅的主题必须是一样的
Range(默认):按照单个主题来分的
      缺点:消费者消费的数据不对等问题

原创文章 6 获赞 2 访问量 127

猜你喜欢

转载自blog.csdn.net/weixin_44604159/article/details/105944176