Kafka知识点复习整理

Kafka面试题复习
一、Kafka架构

生产者(生产消息)、Broker(中间人)、消费者(消费消息)、ZK(注册消息)
注意:Zookeeper中保存Broker id和消费者offsets等信息,但是没有生产者信息。

二、Kafka压测

官方自带压力测试脚本,kafka-consumer-perf-test.sh\kafka-producer-perf-test.sh

三、KafKa的ISR副本同步队列

ISR(in-sync replicas),副本同步队列。ISR中包括Leader和Follower。如果Leader进程挂掉,会在ISR队列中选择一个服务作为新的Leader。有延迟条数和延迟时间两个参数决定一台服务是否可以加入ISR副本队列。任意一个维度超过阈值,都会把Follower剔除出ISR,存入OSR列表,新加入的Follower也会先存放在OSR中。

四、Kafka数据丢失

ACK=0,相当于异步发送,消息发送完毕即offset增加,继续生产。(如果生产者发送的消息在传输过程中发生了错误或丢失,则可能会丢失数据。)

ACK=1,leader收到leader replica(副本)对一个消息的接受ack才增加offset,然后继续生产。(如果leader replica失败并且消息还没有复制到其他副本,可能会导致数据丢失。)

ACK=-1,leader收到所有replica对一个消息的接受ack才增加offset,然后继续生产。(只有当所有副本都收到消息并确认后,才能确保数据不会丢失)

五、Kafka数据重复

幂等性+ack=-1+事务

  1. 幂等性:幂等性是指相同的操作可以安全地重复执行而不会产生不正确的结果。在 Kafka 中,开启幂等性可以确保相同的消息在生产者端被重复发送时,只会被处理一次。当生产者发送一条消息时,Kafka 会根据序列号来判断消息是否已经被处理过,如果是则不会重复处理。
  2. ACK=-1:将 ACK 设置为-1 表示生产者要求所有的副本都成功写入消息后才会发送成功的确认。在这种情况下,只有当消息被复制到所有的副本并且所有副本都确认接收成功后,生产者才会认为消息已成功发送。因此,ACK=-1 可以在一定程度上确保消息不会因为复制不完整而丢失或重复。
  3. 事务:Kafka 提供了事务功能,可以确保消息的原子性和一致性。通过事务,生产者可以将一系列操作(发送消息、写入数据等)组合成一个原子性操作单元,要么全部成功提交,要么全部失败回滚。

Kafka 数据重复,可以在下一级:SparkStreaming、redis 或者Hive中dwd层去重

去重手段:分组、按照id开窗只取第一个值。

六、kafka消息数据积压,kafka消费能力不足怎么处理?

1)如果kafka消费能力不足,可以考虑增加topic的分区数,同时提升消费组的消费者数量,消费者数=分区数。

2)如果是下游的数据处理不及时,提高每批次拉取的数量。批次拉取数据过少(拉取数据、处理时间<生产速度),使处理的数据小于生产的数据,也会造成数据挤压。

七、Kafka高效读写数据

1)Kafka本身是分布式集群,同时采用分区技术,并发度高。

2)顺序写磁盘

kafka的producer生产数据,要写入到log文件中,写的过程是一直追加到文件末端,顺序写。有数据表明,同样的磁盘,顺序写能到600M/s,而随机写只有100K/s。

3)零复制技术

减少数据在内存和网络之间的复制操作,从而提高系统的性能和效率。在传统的数据传输过程中,数据通常需要经过多次复制,例如从磁盘读取到内存,再从内存复制到网络缓冲区,最后从网络缓冲区复制到传输目的地的内存中。这些复制操作会消耗大量的 CPU 资源和内存带宽,降低系统的性能。

具体而言,它通过以下方式实现零复制:

  1. 零拷贝文件传输:Kafka 利用操作系统提供的零拷贝文件传输机制,例如 Linux 中的 sendfile() 系统调用,将数据从磁盘读取到网络发送缓冲区中,避免了数据在内核空间和用户空间之间的多次复制。
  2. 直接内存访问(Direct Memory Access,DMA):Kafka 使用直接内存缓冲区(Direct ByteBuffer),允许数据直接在内存中进行传输,避免了数据在 JVM 堆内存和网络缓冲区之间的复制。
  3. 零复制网络发送:Kafka 利用操作系统提供的网络套接字(Socket)缓冲区,直接将数据从内存发送到网络中,避免了数据在网络缓冲区和用户空间之间的复制。

通过这些优化,Kafka 可以在消息的生产和消费过程中实现零拷贝,减少了不必要的数据复制操作,降低了系统的负载,提高了数据传输的效率和性能。这对于 Kafka 这样的高吞吐量、低延迟的消息传递系统来说尤为重要。

八、kafka过期数据清理

首先保证没有人消费他

日志清理保存的策略只有delete和compact两种

log.cleanup.policy = delete 启用删除策略

log.cleanup.policy = compact 启用压缩策略

九、kafka数据在单分区内有序;多分区,分区和分区之间无序
  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值