Kafka知识点本文就够

一、Kafka概念

Kafka是分布式发布-订阅消息系统,Kafka是一个分布式,可划分的,冗余备份的持久性的日志服务,它主要用于处理流式数据。由四个组件组成,主题、生产者、消费者、经纪人(管理主题中的消息存储)。

二、消息队列的作用

(一)缓冲和削峰

上游数据时有突发流量,下游可能扛不住,或者下游没有足够多的机器来保证冗余,kafka在中间可以起到一个缓冲的作用,把消息暂存在kafka中,下游服务就可以按照自己的节奏进行慢慢处理。

(二)解耦和扩展性

项目开始的时候,并不能确定具体需求。消息队列可以作为一个接口层,解耦重要的业务流程。只需要遵守约定,针对数据编程即可获取扩展能力。

(三)冗余

可以采用一对多的方式,一个生产者发布消息,可以被多个订阅topic的服务消费到,供多个毫无关联的业务使用。

(四)健壮性

消息队列可以堆积请求,所以消费端业务即使短时间死掉,也不会影响主要业务的正常进行。

(五)异步通信

很多时候,用户不想也不需要立即处理消息。消息队列提供了异步处理机制,允许用户把一个消息放入队列,但并不立即处理它。想向队列中放入多少消息就放多少,然后在需要的时候再去处理它们。

三、Kafka相对传统技术的优势

传统的消息传递方法包括两种:
1、排队:在队列中,一组用户可以从服务器中读取消息,每条消息都发送给其中一个人。
2、发布-订阅:在这个模型中,消息被广播给所有的用户。
Apache Kafka与传统的消息传递技术相比优势之处在于:

(一)快速

单一的Kafka代理可以处理成千上万的客户端,每秒处理数兆字节的读写操作。

(二)可伸缩

在一组机器上对数据进行分区和简化,以支持更大的数据

(三)持久

消息是持久性的,并在集群中进行复制,以防止数据丢失。

(四)设计

它提供了容错保证和持久性

四、kafka 为什么那么快

顺序读写、零拷贝、消息压缩、分批发送
Kafka 实现了零拷贝原理来快速移动数据,避免了内核之间的切换。Kafka 可以将数据记录分批发送,从生产者到文件系统(Kafka 主题日志)到消费者,可以端到端的查看这些批次的数据。
批处理能够进行更有效的数据压缩并减少 I/O 延迟,Kafka 采取顺序写入磁盘的方式,避免了随机磁盘寻址的浪费

五、Kafka 消息是采用 Pull 模式,还是 Push 模式

Kafka 采用传统的Pull模式,consumer就可以根据自己的消费能力去决定这些策略。
缺点:如果broker没有可供消费的消息,将导致 consumer 不断在循环中轮询,直到新消息到达。为了避免这点,Kafka 有个参数可以让consumer 阻塞知道新消息到达。

六、kafka中的broker的作用

broker 是消息的代理,Producers往Brokers里面的指定Topic中写消息,Consumers从Brokers里面拉取指定Topic的消息,然后进行业务处理,broker在中间起到一个代理保存消息的中转站。

七、Zookeeper在Kafka中的作用

早期版本的kafka用zk做meta信息存储,consumer的消费状态,group的管理以及 offset的值。
新版本中逐渐弱化了zookeeper的作用。新的consumer使用了kafka内部的group coordination协议,也减少了对zookeeper的依赖,但是broker依然依赖于ZK,zookeeper在kafka中还用来选举controller和检测broker是否存活等。

八、Kafka 如何判断节点是否存活

1、必须可以维护和 ZooKeeper 的连接,ZooKeeper 通过心跳机制检查每个节点的连接
2、如果节点是个 follower,他必须能及时的同步 leader 的写操作,延时不能太久

九、kafka中consumer group

是Kafka实现单播和广播两种消息模型的手段。同一个topic的数据,会广播给不同的group;同一个group中的worker,只有一个worker能拿到这个数据。

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

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

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

offset+1

十二、ISR、AR概念

ISR:In-Sync Replicas 副本同步队列
AR:Assigned Replicas 所有副本
ISR是由leader维护,follower从leader同步数据有一些延迟,任意一个超过阈值都会把follower剔除出ISR,存入OSR(Outof-Sync Replicas)列表,新加入的follower也会先存放在OSR中。AR=ISR+OSR。

十三、如何减少ISR中的扰动,broker什么时候离开ISR?

ISR是一组与leaders完全同步的消息副本,也就是说ISR中包含了所有提交的消息。ISR应该总是包含所有的副本,直到出现真正的故障。如果一个副本从leader中脱离出来,将会从ISR中删除。
如果一个副本在ISR中保留了很长一段时间,那么它就表明,跟踪器无法像在leader收集数据那样快速地获取数据。
如果首选的副本不在ISR中,控制器将无法将leadership转移到首选的副本。

十四、kafka follower如何与leader同步数据

kafka使用ISR的方式很好的均衡了确保数据不丢失以及吞吐率。Follower可以批量的从Leader复制数据,而且Leader充分利用磁盘顺序读以及send file(zero copy)机制,这样极大的提高复制性能,内部批量写磁盘,大幅减少了Follower与Leader的消息量差。

十五、什么情况下一个 broker 会从ISR中踢出去

leader会维护一个与其基本保持同步的Replica列表,该列表称为ISR(in-sync Replica),每个Partition都会有一个ISR,而且是由leader动态维护 ,如果一个follower比一个leader落后太多,或者超过一定时间未发起数据复制请求,则leader将其重ISR中移除 。

十六、kafka producer 打数据时的ack机制

ack:producer收到多少broker的答复才算真的发送成功
0表示producer无需等待leader的确认(吞吐最高、数据可靠性最差)
1代表需要leader确认写入它的本地log并立即确认
-1/all 代表所有的ISR都完成后确认(吞吐最低、数据可靠性最高)

十七、leader选举过程

ZooKeeper集群中的选举机制是通过Paxos算法,通过不同节点向其他节点发送信息来投票选举出leader,但是Kafka的leader的选举就没有这么复杂了。
Kafka的Leader选举是通过在ZooKeeper上创建/controller临时节点来实现leader选举,并在该节点中写入当前broker的信息 {“version”:1,”brokerid”:1,”timestamp”:”1512018424988”} 利用ZooKeeper的强一致性特性,一个节点只能被一个客户端创建成功,创建成功的broker即为leader,即先到先得原则,leader也就是集群中的controller,负责集群中所有大小事务。当leader和ZooKeeper失去连接时,临时节点会删除,而其他broker会监听该节点的变化,当节点删除时,其他broker会收到事件通知,重新发起leader选举。

十八、kafka什么情况下会rebalance

1、有新的consumer加入
2、旧的consumer挂了
3、coordinator挂了,集群选举出新的coordinator
4、topic的partition新加
5、consumer调用unsubscrible(),取消topic的订阅
rebalance 发生时,Group下所有consumer实例都会协调在一起共同参与,kafka能够保证尽量达到最公平的分配。但是 Rebalance 过程对 consumer group 会造成比较严重的影响。在Rebalanc的过程中consumer group下的所有消费者实例都会停止工作,等待Rebalance过程完成。

十九、Rebalance有什么影响

Rebalance本身是Kafka集群的一个保护设定,用于剔除掉无法消费或者过慢的消费者,然后由于我们的数据量较大,同时后续消费后的数据写入需要走网络IO,很有可能存在依赖的第三方服务存在慢的情况而导致我们超时。Rebalance对我们数据的影响主要有以下几点:
1、数据重复消费: 消费过的数据由于提交offset任务也会失败,在partition被分配给其他消费者的时候,会造成重复消费,数据重复且增加集群压力
2、Rebalance扩散到整个ConsumerGroup的所有消费者,因为一个消费者的退出,导致整个Group进行了Rebalance,并在一个比较慢的时间内达到稳定状态,影响面较大
3、频繁的Rebalance反而降低了消息的消费速度,大部分时间都在重复消费和Rebalance
数据不能及时消费,会累积lag,在Kafka的TTL之后会丢弃数据

二十、kafka producer优化打入速度

1、增加线程
2、提高 batch.size
3、增加更多 producer 实例
4、增加 partition 数
5、设置 acks=-1 时,如果延迟增大:可以增大 num.replica.fetchers(follower 同步数据的线程数)来调解;
6、跨数据中心的传输:增加 socket 缓冲区设置以及 OS tcp 缓冲区设置。

二十一、其他

1、提高远程用户的吞吐量
如果用户位于与broker不同的数据中心,则可能需要调优套接口缓冲区大小,以对长网络延迟进行摊销。
2、kafka提高吞吐量的配置
batch.size 默认是单批次最大16384字节,超过该值就立即发送。
linger.ms 默认是0ms,超过该时间就立即发送。
上面两个条件满足其一,就立即发送消息否则等待。

猜你喜欢

转载自blog.csdn.net/wh672843916/article/details/115055174
今日推荐