大数据之Kafka面试题

本文详细介绍了Kafka的特点,包括高并发、高吞吐低延迟、可扩展性和持久性等。讨论了Kafka的架构组件,如Producer、Topic、Consumer、Consumer Group、Broker、Partition和Offset。Kafka通过分区实现负载均衡和提高并发度,但仅能保证局部消息有序。文章还探讨了Kafka如何确保消息不丢失,涉及ack机制、幂等性和全局事务。此外,提到了Kafka数据一致性原理及ISR、OSR和AR的概念,并指出分区数可以增加但不能减少。最后,对比了新旧消费者的不同以及Zookeeper在Kafka中的角色。
摘要由CSDN通过智能技术生成

Kafka的特点:

  • 1.高并发:支持数千个客户端同时读写数据
  • 2.高吞吐低延迟:Kafka每秒处理几十万条数据,但是延迟只有几毫秒
  • 3.可扩展:集群支持热扩展
  • 4.持久性:将消息数据持久化到本地磁盘,多副本保存
  • 5.容错性:允许集群节点失败

Kafka的架构

  • 1.Producer:生产者,向kafka Broker发消息
  • 2.Topic:主题,可以理解为一个消息队列,一个Topic可以分成多个分区
  • 3.Consumer:消费者,向Kafka Broker拉取消息,多个消费者可以构成一个消费者组
  • 4.Consumer Group:消费者组, kafka 用来实现一个 topic 消息的广播(发给所有consumer)和单播(发给任意一个 consumer)的手段。一个 topic 可以有多个 Consumer Group。
  • 5.Broker:一台kafka服务器就是一个Broker,一个集群由多个Broker组成,一个Broker可以容纳多个Topic
  • 6.Partition:分区,数据量非常大的Topic可以分布在多个Broker上,每一个partition都是一个有序的队列,即局部有序.靠着offset保持有序.但是不能保证全局有序.
  • 7.Offset:偏移量,kafka存储文件都是用offset.kafka来命名,方便查询

Kafka分区的目的
分区对于kafka的好处是可以实现负载均衡,同时可以给消费者消费数据提高并发度,提高读取效率,

Kafka如何做到消息的有序性
Kafka可以局部有序,但是不能全局有序.kafka每个分区的数据都是有序的,单个partition只能有一个消费者消费.

kafka如何保证消息不丢失

分三个部分保证数据的可靠性和一致性:生产者层面,broker层面,消费者层面
生产者:
ack机制
0不关心响应
1默认的,等待leader确认信息
-1(all)全部确认
retries重试机制----默认为0,不重试
幂等性:
操作多次的结果和操作一次的结果是一样的(enable.idempotence=true)
保证我们分区的精准一次性
(全局)事务:read–process–write(kafka–程序–kafka)
broker集群
1.分区机制针对topic进行分区–不同分区
2.副本机制
消费者
自己手动提交 存储在外部介质中 比如mysql

谈一谈Kafka数据一致性原理
数据一致性指的是无论是先前的leader还是现在新选取的leader,消费者都可以读到一样的数据.这是由高水位线保障的,高水位线(HW)取决于ISR列表中偏移量最小的分区.类似于木桶原理,只取最小偏移量的数据.是为了保证数据安全,如果选择水位线高的,将会导致数据不安全

ISR,OSR,AR分别是什么
AR:所有副本
ISR:副本同步队列(包括leader在内)
OSR:副本不同步队列
AR = ISR + OSR

Kafka分区数可以增加或者减少吗?为什么?
可以增加不可以减少
不能减少是因为会导致数据丢失,会有未消费的数据导致丢失,如果要插入其他分区则不能保证单分区有序,而且偏移量也不好管理.

Kafka新旧消费者的区别
旧的消费者主要包括:SimpleConsumer(简单消费者)和ZookeeperConsumerConnection(高级消费者),高级消费者和新的消费者有点像,有消费者群组,有分区再均衡,不过高级消费者使用ZK来管理消费者群组,并不具备偏移量再均衡的课操控性.

ZK在kafka中的作用

  • kafka集群broker位置状态信息

  • 给broker进行选举,选举controller

  • 保存集群topic元数据
    1. 名称
    2. 分区

     	1. leader副本位置
     	2. ISR副本
    
  • 保存消费者信息

      1. 老版本中   消费记录是保存在ZK中
      2. 新版本中   消费记录是保存在kafka自己内部主题中
    
  • kafka集群的一些配置参数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值