kafka源码-问题整理

1. 解读kafak的read和append方法

参考文章:kafka 日志段 - 搜索结果 - 知乎

2.patiton的leader和follow分别起了什么样的作用?

某个topic的某个leader所在的broke可以是不一样的。

3. 什么是分区的重分配?什么情况下会触发?分区重分配发生了哪些事情?

分区重分配指的是为分区重新分配实例。

触发时间:

分区重新分配,主要是在需要进行横向扩展Broker的时候或者有计划下线Broker的时候使用,假如在Kafka集群中新加入了一个Broker,那么只有新增的topic对应的分区才会分配到该节点上,之前的topic数据是不会分配给该节点的,这就导致了新增节点与原先节点数据的严重不均衡,所以kafka提供了kafka-reassign-partitions.sh脚本,在节点扩展、Broker下线的时候通过数据复制的方式重新分配分区
 

4. 一个消费组的初始消费位置是如何确定的?

kafka对于同一组内的不同消费者是不能重复消费的,它是怎么做到的呢?即当一个consumer因某种原因退出Group时,同一group中的另一个consumer再读取该partition时,怎么能够知道上一个consumer该从哪个offset的message读取呢?为了做到这一点,当使用完poll从本地缓存拉取到数据之后,需要client调用commitSync方法(或者commitAsync方法)去commit 下一次该去读取哪一个offset的message。而这个commit方法会通过走网络的commit请求将offset在coordinator中保留,这样就能够保证下一次读取(不论进行了rebalance)时,既不会重复消费消息,也不会遗漏消息。
为了保证以上消费数据目标,需要组合配置参数auto.offset.reset和enable.auto.commit

auto.offset.reset值含义解释

earliest

当各分区下有已提交的offset时,从提交的offset开始消费;无提交的offset时,从头开始消费

latest

当各分区下有已提交的offset时,从提交的offset开始消费;无提交的offset时,消费新产生的该分区下的数据

none

topic各分区都存在已提交的offset时,从offset后开始消费;只要有一个分区不存在已提交的offset,则抛出异常

默认建议用earliest。设置该参数后 kafka出错后重启,找到未消费的offset可以继续消费。

而latest 这个设置容易丢失消息,假如kafka出现问题,还有数据往topic中写,这个时候重启kafka,这个设置会从最新的offset开始消费,中间出问题的哪些就不管了。

none这个设置没有用过,兼容性太差,经常出问题。

5. kafka的的只有leader和follow的指责?

leader负责消息的读写。follow起到数据冗余备份的作用。

6. 单次pull的时间过长会导致kafka客户端reblance吗?

会的,如果两次pull之间间隔的时间超过了max.pull.interval.ms, 会引发consumer Group的reblance操作。可以将每一次pull的数量调小或则将max.pull.interval.ms调打。

7. 消费端参数介绍

a. session.timeout.ms 这个时间段内没有发送出心跳请求,会组协调器会认为消费者已退出。

b. heartbeat.interval.ms  发送心跳请求的时间间隔

c. auto.commit.interval.ms 自动提交间隔时间,设置了自动提交消费偏移量才有用

你可能感兴趣的:(kafka,big,data)