kafka 问题(一)

1. kafka 是什么,有什么作用

kafka 是一个分布式的流式处理平台,它以高吞吐,可持久化,可水平扩展,支持流数据处理等多种特种

消息系统: kafka与传统消息中间件都具备可解耦,冗余存储,流量削峰,缓冲,异步通信,扩展性,可恢复性等功能

存储系统: kafka可以把消息持久化到硬盘,主要得益于消息持久化和多副本机制,也可以作为长期的存储系统来使用,只要将数据保留策略设置为“永久”

流式处理平台: kafka为流行的流式处理框架提供了可靠的数据来源,还提供了一个完整的流式处理框架,比如窗口、连接、变换和聚合等各类操作

2.Kafka Replicas 是怎么管理的

AR: 分区中所有的Replica统称为AR

ISR: 所有与Leader副本保持一定程度同步的Replica(包括Leader 副本在内)组成ISR

OSR: 与Leader副本同步滞后过多的Replica组成了OSR

Leader 负责维护和跟踪ISR集合中所有Follower副本的滞后状态,当Follower 副本落后过多时,就会将其放入OSR,当Follower副本追上了Leader进度时,就会放入ISR集合

默认情况下,只有ISR中的副本才有资格晋升为Leader

3.如何确定当前能读到哪一条消息

如上图是一个分区日志文件

    • 标识共有7条消息,offset(消息偏移量)分别是0-6
    • 0代表这个日志文件的开始
    • HW(high Watermark)为4,0~3代表这个日志文件可以消费的区间,消费者只能消费到这4条消息
    • LEO代表即将要写入消息的偏移量

分区ISR集合中的每个副本都会维护自己的LEO,而ISR集合中最小的LEO即为分区的HW

  • 4.生产者发送消息有哪些模式

  • 发后即忘: 它只管往kafka里面发消息,不关心消息是否到达,效率高但是可靠性差,消息可能丢失
  • 同步: producer.send() 返回一个Future对象,调用get()方法变回进行同步等待,需要等上一个消息发送成功,才发送下一条
  • 异步: 支持producer.send()传入一个回调函数,消息不管成功或失败都会调用这个回调函数。在回调函数记录日志并决定是否重试

5.发送消息的分区策略有哪些?

  • 轮询: 依次将消息发送该topic的所有分区,如果创建消息的时候key为null,kafka默认采用这种策略
  • key指定分区: 在创建消息key不为空,使用默认分区器,对key进行hash,然后根据hash值映射到指定分区,且能保证一定的顺序,但是partation数量发生变化,就很难保证key与分区之间的映射关系
  • 自定义策略: 实现Partitioner 接口就能自定义分区策略
  • 指定Partiton发送

6. kafka支持读写分离吗,

不支持,主要由于kafka的架构读写分离涉及到数据的同步,而不同节点之间的数据同步会造成数据不一致。且还有延时问题(磁盘节点同步)

7. kafka如何实现负载均衡

kafka的负载均衡主要是通过分区来实现的,我们知道kafka是主写主读的架构,如下图

共有三个broker,里面各有三个副本,三个partiton. 深色的是leader,浅色的是Follower,上下灰色代表生产者,消费者,虚线代表follower从从leader拉取数据

每个broker都有消费者拉取消息,每个broker都有生产者发送消息。每个broker上的读写负载都是一样的,这也说明了kafka独特的架构方式可以通过主写主读实现负载均衡

8. kafka负载均衡会有什么问题

kafka的负载均衡在绝对理想的情况下可以实现,但是会有某些情况出现一定程度上的负载不均衡

    • broker端分配不均: 当topic创建的时候可能会出现某些broker分配到的分区数多,而有些broker分配的分区少,导致leader多副本不均
    • 生产者写入消息不均:生产者可能只对某些broker中的leader副本进行大量写入操作,而对其他的leader副本不闻不问
    • 消费者消费不均: 消费者可能只对某些broker中的leader副本进行大量的拉取操作,而对其他leader副本不闻不问
    • leader副本切换不均: 当主从副本切换或者分区副本进行了重分配后,可能会导致各个broker中的leader副本分配不均匀

9.分区再分配是做什么的,解决什么问题

分区再分配主要是用来维护kafka的负载均衡

当集群中的一个节点下线了

如果该节点的分区是单副本的,那么分区将会变得不可用

如果该节点是多副本的,就会进行leader选举,在其他机器选出新的leader

kafka并不会将这些失效的分区迁移到其他可用的broker上,这样会影响集群的负载均衡,甚至也会影响服务的可靠性和可用性

当集群新增broker时,只有新的主题分区会分配在broker上,而老的主题分区不会分配在该broker上,就造成了老节点和新节点之间的负载不均衡

为了解决该问题就出现了分区再分配,它可以在集群扩容,broker失效的场景下进行分区迁移

分区再分配的原理就是通过控制器给分区新增新的副本,然后通过网络把旧的副本数据复制到新的副本上,在复制完成后,将旧副本清除,在复制期间会进行一些操作,比如复制限流

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值