24
2020
04

为什么Kafka不支持读写分离?

在 Kafka 中,生产者写入消息、消费者读取消息的操作都是与 leader 副本进行交互的,从 而实现的是一种主写主读的生产消费模型。Kafka 并不支持主写从读,因为主写从读有 2 个很明 显的缺点:(1)数据一致性问题。数据从主节点转到从节点必然会有一个延时的时间窗口,这个时间 窗口会导致主从节点之间的数据不一致。某一时刻,在主节点和从节点中 A 数据的值都为 X, 之后将主节点中 A 的值修改为 Y,那么在这个变更通知到从节点之前,应用读取从节点中的 A 数据的值并不为最新的 Y,由此便
24
2020
04

Kafka中是怎么体现消息顺序性的?

kafka每个partition中的消息在写入时都是有序的,消费时,每个partition只能被每一个group中的一个消费者消费,保证了消费时也是有序的。整个topic不保证有序。如果为了保证topic整个有序,那么将partition调整为1.
24
2020
04

消费者提交消费位移时提交的是当前消费到的最新消息的offset还是offset+1?

offset+1
24
2020
04

kafka如何实现延迟队列?

Kafka并没有使用JDK自带的Timer或者DelayQueue来实现延迟的功能,而是基于时间轮自定义了一个用于实现延迟功能的定时器(SystemTimer)。JDK的Timer和DelayQueue插入和删除操作的平均时间复杂度为O(nlog(n)),并不能满足Kafka的高性能要求,而基于时间轮可以将插入和删除操作的时间复杂度都降为O(1)。时间轮的应用并非Kafka独有,其应用场景还有很多,在Netty、Akka、Quartz、Zookeeper等组件中都存在时间轮的踪影。底层使用数组实
12
2020
04

AR,ISR和OSR的含义与关系

AR:所有副本ISR:leader副本和与leader副本保持一定同步的follower副本。OSR:同步滞后的副本集合。AR = ISR + OSR
12
2020
04

acks参数含义

acks=0:不需要等待任何返回。acks=1:需要等待leader副本写入成功,不等待follower副本。acks=-1:需要等待leader副本与所有follower副本写入成功。
12
2020
04

分区的副本机制

分区的副本机制,是一主多从的关系,各副本之间的内容是一致的。leader副本用来读写,follower副本用来备份。一旦leader副本下线,会通过选举机制选举新的leader副本。(按照ISR列表中选取)不同的副本在不同的broker中。
12
2020
04

消费者组与分区关系

每个分区只能被消费者组中的一个消费者消费,一个消费者可以消费多个分区。
12
2020
04

消息与主题,分区间的关系

每一个消息都归属于某一个主题,kafka中以主题为单位进行归类。每一个主题会有若干个分区,每个分区只属于一个主题,每个分区包含的消息不同而且是有序的。
12
2020
04

消费语义

1. 至多消费一次:消息可能丢失,但绝不重传。2. 至少消费一次:消息可能重传,但绝不丢失。3. 仅被消费一次:消息只被传递一次。
12
2020
04

消息投递模式

1. push模式  优点:及时性好  缺点:受限于消费能力,可能造成积压。2. pull模式  优点:消费者可按需获取。  缺点:及时性差,可能会延迟。
12
2020
04

消息队列的主要作用

解耦,将生产者与消费者解耦。数据冗余,消息队列中还会有一份数据备份。缓冲,生产者消费者速度不匹配时,做缓冲。
08
2020
04

如何获取 topic 主题的列表

bin/kafka-topics.sh --list --zookeeper localhost:2181