Kafka 常见面试题

Kafka 常见面试题

  • 目录
    • 概述
      • 需求:
    • 设计思路
    • 实现思路分析
      • 1.什么是一次性语义?
      • 2.:Kafka 如何保证生产一次性语义?
      • 3.ACK机制:acks = 0/1/all/-1
      • 4.重试机制
  • 参考资料和推荐阅读

Survive by day and develop by night.
talk for import biz , show your perfect code,full busy,skip hardness,make a better result,wait for change,challenge Survive.
happy for hardess to solve denpendies.

目录

在这里插入图片描述

概述

Kafka 常见面试题

需求:

  1. Kafka 消息队列的一次性语义

设计思路

实现思路分析

1.什么是一次性语义?

at-most-once:至多一次【允许为0次,可能数据丢失】
at-least-once:至少一次【至少一次,允许多次,可能数据重复】
exactly-once:有且仅有一次【只有一次,精准数据传输】

2.:Kafka 如何保证生产一次性语义?

数据丢失场景:生产者将数据发送给Kafka,数据在网络传输过程中可能丢失
ACK + 重试机制:生产者生产数据写入Kafka,等待Kafka返回ack确认,收到ack,生产者发送下一条

3.ACK机制:acks = 0/1/all/-1

0:不等待ack,直接发送下一条
优点:快;
缺点:数据易丢失

1:生产者将数据写入Kafka,Kafka 等待这个分区的 Leader 副本返回ack,发送下一条
优点:性能和安全做了中和的选项;
缺点:依旧存在一定概率的数据丢失的情况
all/-1:生产者将数据写入Kafka,Kafka 等待这个分区所有ISR 【可用】副本同步成功才返回ack,发送下一条

优点:安全

缺点:性能比较差
问题:如果ISR中只有leader一个,leader写入成功,直接返回,leader故障数据丢失怎么办?

解决:搭配min.insync.replicas来使用,并且 >= 2
min.insync.replicas:表示最少要有几个ISR的副本

4.重试机制

retries = 3 #发送失败的重试次数
数据重复的情况:ACK丢失

Step1 : 生产发送一条数据 A 给 Kafka

Step2 :Kafka 存储数据 A,返回Ack 给生产者

Step3 :如果ack丢失,生产者没有收到 ack,超时,生产者认为数据丢失没有写入 Kafka

Step4 : 生产者基于重试机制重新发送这条数据 A,Kafka 写入数据 A,返回 ack
Step5 : 生产者收到 ack ,发送下一条B
问题: A 在 Kafka 中写入两次,产生数据重复的问题

解决:
实现:生产者在生产数据的过程中会在每条数据中增加一个数据id,当前这一条数据会比上一条数据id多1 。由Kafka服务端进行判断,会根据id进行判断是否写过该数据:
如果没有写入:写入Kafka;
如果已经写入:直接返回ack.

参考资料和推荐阅读

  1. https://www.jianshu.com/p/dab60fcd672d

欢迎阅读,各位老铁,如果对你有帮助,点个赞加个关注呗!~

你可能感兴趣的:(#,kafka,kafka,java,分布式)