Kafka的原理是怎么样的?[面试6.0]

在这里插入图片描述

Kafka由broker,topic,partition组成
broker: 一个kafka应用实例(节点)
topic: 主题,一个主题对应多个partition
partition: 分区,当消息队列性能不高时可以增加partition,一个partition可以看做是一个先进先出(FIFO)的队列

Kafka通过生产者提供消息到消息队列,再通过消费者拉取或者订阅消息并进行消费
有两种方式:拉取或订阅,其中拉取用在点对点的消费情况,订阅是指多个消费者订阅后,当消息队列有数据了就会推送(push)消息给消费者

Kafka的高可用性是怎样的?[面试6.0]

kafkaMq高可用架构-协作
kafkaMq高可用架构-视频

Kafka由broker,topic,partition组成
broker: 一个kafka应用实例(节点)
topic: 主题,一个主题对应多个partition
partition: 分区,当消息队列性能不高时可以增加partition,一个partition可以看做是一个先进先出(FIFO)的队列

Kafka0.8以后,提供了HA机制,就是replica(复制品)副本机制,每个partition的数据都会同步到其它机器上,形成自己的多个replica副本,所有replica会选举一个leader出来,那么生产和消费都跟这个leader打交道,然后其他replica就是follower,写的时候,leader会负责把数据同步到所有follower上去,读的时候就直接读leader上的数据即可,Kafka会均匀地将一个partition的所有replica分布在不同的机器上,这样才可以提高容错性

若某个broker宕机了,那个broker上面的partition在其他机器上都有副本的,如果这个宕机的broker上面有某个partition的leader,那么此时会从follower中重新选举一个新的leader出来,大家继续读写那个新的leader即可

写数据的时候,生产者就写leader,然后leader将数据落地写本地磁盘,接着其他follower自己主动从leader进行pull数据,一旦所有follower同步好数据了,就会发送ack给leader,leader收到所有follower的ack之后,就会返回成功的消息给生产者

消费的时候,只会从leader去读,但是只有当一个消息已经被所有follower都同步成功返回ack的时候,这个消息才会被消费者读到

Kafka如何保证消息不被重复消费?(同问:使用消息队列如何保证幂等性?)[面试6.0]

采用Redis设置一个参数避免重复消费
如数据要写数据库,先判断是否已经写入了这条数据了,若有就不再写了
利用数据库的唯一约束保证重复数据不会重复插入

Kafka消息队列如何保证消息的可靠性传输?(同问:如何处理消息丢失的问题?)[面试6.0]

在生产阶段,你需要捕获消息发送的错误,并重发消息
在存储阶段,通过配置刷盘和复制相关的参数,让消息写入到多个副本的磁盘上,来确保消息不会因为某个Broker宕机或者磁盘损坏而丢失
在消费阶段,你需要在处理完全部消费业务逻辑之后,再发送消费确认

Kafka消息是有序的吗?[面试7.0]

在同一个partition里的消息是有序的(一个partition对应一个消费者),不同partition之间的消息是没法保证全局有序的

Kafka如何保证消息的顺序性?(How Kafka guarantees message ordering?)[面试7.0]

一个topic,一个partition,一个consumer,内部单线程消费,单线程吞吐量太低,一般不会用这个
写N个内存队列,队列中(通过hash方式路由),每个线程分别消费一个内存队列即可,这样就能保证顺序性

Logo

Kafka开源项目指南提供详尽教程,助开发者掌握其架构、配置和使用,实现高效数据流管理和实时处理。它高性能、可扩展,适合日志收集和实时数据处理,通过持久化保障数据安全,是企业大数据生态系统的核心。

更多推荐