这一篇就够了!Kafka面试前的准备,建议收藏

kafka原理及面试套路 kafka原理及面试套路一、 面试:1、列举kafka的使用场景2、Kafka消息是采用Pull模式,还是Push模式?3、 Kafka 与传统消息系统之间有三个关键区别4. Kafka中是怎么体现消息顺序性的?5、Kafka生产者客户端中使用了几个线程来处理?分别是什么?6、Kafka中的分区器、序列化器、拦截器是否了解?它们之间的处理顺序是什么?7、 “消费组中的消费者个数如果超过topic的... 阅读详情

前言

在前段时间面试时,我发现不少面试官爱问Kafka相关的问题,这也不难理解,谁让Kafka是大数据领域消息队列里炙手可热的存在。

这不,今天就来和大家分享Kafka常见的面试干货,爱了,爱了,果断收藏!

以下问题 先在脑海 过一遍,是否能够回忆清楚?

  1. 为什么要用消息队列?为什么选择了kafka?
  2. kafka的组件与作用(架构)?
  3. kafka为什么要分区?
  4. Kafka生产者分区策略?
  5. kafka的数据可靠性怎么保证?(丢,重)
  6. kafka的副本机制?
  7. kafka的消费分区分配策略?
  8. kafka的offset怎么维护?
  9. kafka为什么这么快?(高效读写数据)
  10. Kafka消息数据积压,Kafka消费能力不足怎么处理?
  11. kafka事务是怎么实现的?
  12. Kafka中的数据是有序的吗?
  13. Kafka可以按照时间消费数据?
  14. Kafka单条日志传输大小?
  15. Kafka参数优化?
  16. Kafka适合以下应用场景?
  17. Exactly Once语义?在流式计算中怎么保持?

解析参考

为什么要用消息队列

  1. 解耦

允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束。

  1. 可恢复性

系统的一部分组件失效时,不会影响到整个系统。消息队列降低了进程间的耦合度,所以即使一个处理消息的进程挂掉,加入队列中的消息仍然可以在系统恢复后被处理。

  1. 缓冲

有助于控制和优化数据流经过系统的速度,解决生产消息和消费消息的处理速度不一致的情况。

  1. 灵活性与峰值处理能力

在访问量剧增的情况下,应用仍然需要继续发挥作用,但是这样的突发流量并不常见。如果为以能处理这类峰值访问为标准来投入资源随时待命无疑是巨大的浪费。使用消息队列能够使关键组件顶住突发的访问压力,而不会因为突发的超负荷的请求而完全崩溃。

  1. 异步通信

很多时候,用户不想也不需要立即处理消息。消息队列提供了异步处理机制,允许用户把一个消息放入队列,但并不立即处理它。想向队列中放入多少消息就放多少,然后在需要的时候再去处理它们。

为什么选择了kafka

  1. 高吞吐量、低延迟:kafka每秒可以处理几十万条消息,它的延迟最低只有几毫秒。
  2. 可扩展性:kafka集群支持热扩展。
  3. 持久性、可靠性:消息被持久化到本地磁盘,并且支持数据备份防止数据丢失。
  4. 容错性:允许集群中节点故障(若副本数量为n,则允许n-1个节点故障)。
  5. 高并发:支持数千个客户端同时读写。

kafka的组件与作用(架构)

  1. Producer :消息生产者,就是向kafka broker发消息的客户端。
  2. Consumer :消息消费者,向kafka broker取消息的客户端。
  3. Consumer Group (CG):消费者组,由多个consumer组成。消费者组内每个消费者负责消费不同分区的数据,一个分区只能由一个组内消费者消费;消费者组之间互不影响。所有的消费者都属于某个消费者组,即消费者组是逻辑上的一个订阅者。
  4. Broker :一台kafka服务器就是一个broker。一个集群由多个broker组成。一个broker可以容纳多个topic。
  5. Topic :可以理解为一个队列,生产者和消费者面向的都是一个topic。
  6. Partition:为了实现扩展性,一个非常大的topic可以分布到多个broker(即服务器)上,一个topic可以分为多个partition,每个partition是一个有序的队列。
  7. Replica:副本,为保证集群中的某个节点发生故障时,该节点上的partition数据不丢失,且kafka仍然能够继续工作,kafka提供了副本机制,一个topic的每个分区都有若干个副本,一个leader和若干个follower。
  8. leader:每个分区多个副本的“主”,生产者发送数据的对象,以及消费者消费数据的对象都是leader。
  9. follower:每个分区多个副本中的“从”,实时从leader中同步数据,保持和leader数据的同步。leader发生故障时,某个follower会成为新的follower。

kafka为什么要分区

  1. 方便在集群中扩展,每个Partition可以通过调整以适应它所在的机器,而一个topic又可以有多个Partition组成,因此整个集群就可以适应任意大小的数据了。
  2. 可以提高并发,因为可以以Partition为单位读写。

Kafka生产者分区策略

  1. 指明 partition 的情况下,直接将指明的值直接作为partiton值。
  2. 没有指明partition值但有key的情况下,将key的hash值与topic的partition数进行取余得到partition值。
  3. 既没有partition值又没有key值的情况下,第一次调用时随机生成一个整数(后面每次调用在这个整数上自增),将这个值与topic可用的partition总数取余得到partition值,也就是常说的round-robin算法。

kafka的数据可靠性怎么保证

为保证producer发送的数据,能可靠的发送到指定的topic,topic的每个partition收到producer发送的数据后,都需要向producer发送ack(acknowledgement确认收到),如果producer收到ack,就会进行下一轮的发送,否则重新发送数据。所以引出ack机制。

ack应答机制(可问:造成数据重复和丢失的相关问题)

Kafka为用户提供了三种可靠性级别,用户根据对可靠性和延迟的要求进行权衡,选择以下的配置。acks参数配置:

  • 0:producer不等待broker的ack,这一操作提供了一个最低的延迟,broker一接收到还没有写入磁盘就已经返回,当broker故障时有可能丢失数据。
  • 1:producer等待broker的ack,partition的leader落盘成功后返回ack,如果在follower同步成功之前leader故障,那么将会丢失数据。
  • -1(all):producer等待broker的ack,partition的leader和follower全部落盘成功后才返回ack。但是如果在follower同步完成后,broker发送ack之前,leader发生故障,那么会造成数据重复。

副本数据同步策略

方案

优点

缺点

半数以上完成同步,就发送ack

延迟低

选举新的leader时,容忍n台节点的故障,需要2n+1个副本

全部完成同步,才发送ack

选举新的leader时,容忍n台节点的故障,需要n+1个副本

延迟高

选择最后一个的原因:

  1. 同样为了容忍n台节点的故障,第一种方案需要2n+1个副本,而第二种方案只需要n+1个副本,而Kafka的每个分区都有大量的数据,第一种方案会造成大量数据的冗余。
  2. 虽然第二种方案的网络延迟会比较高,但网络延迟对Kafka的影响较小。

ISR

如果采用全部完成同步,才发送ack的副本的同步策略的话:提出问题:leader收到数据,所有follower都开始同步数据,但有一个follower,因为某种故障,迟迟不能与leader进行同步,那leader就要一直等下去,直到它完成同步,才能发送ack。这个问题怎么解决呢?

Leader维护了一个动态的in-sync replica set (ISR),意为和leader保持同步的follower集合。当ISR中的follower完成数据的同步之后,leader就会给follower发送ack。如果follower长时间未向leader同步数据,则该follower将被踢出ISR,该时间阈值由replica.lag.time.max.ms参数设定。Leader发生故障之后,就会从ISR中选举新的leader。

故障处理(LEO与HW)

LEO:指的是每个副本最大的offset。

HW:指的是消费者能见到的最大的offset,ISR队列中最小的LEO。

follower故障

follower发生故障后会被临时踢出ISR,待该follower恢复后,follower会读取本地磁盘记录的上次的HW,并将log文件高于HW的部分截取掉,从HW开始向leader进行同步。等该follower的LEO大于等于该Partition的HW,即follower追上leader之后,就可以重新加入ISR了。

leader故障

leader发生故障之后,会从ISR中选出一个新的leader,之后,为保证多个副本之间的数据一致性,其余的follower会先将各自的log文件高于HW的部分截掉,然后从新的leader同步数据。

注意:这只能保证副本之间的数据一致性,并不能保证数据不丢失或者不重复。

kafka的副本机制

参考上一个问题(副本数据同步策略)。

kafka的消费分区分配策略

一个consumer group中有多个consumer,一个topic有多个partition,所以必然会涉及到partition的分配问题,即确定那个partition由哪个consumer来消费 Kafka有三种分配策略,一是RoundRobin,一是Range。高版本还有一个StickyAssignor策略 将分区的所有权从一个消费者移到另一个消费者称为重新平衡(rebalance)。当以下事件发生时,Kafka 将会进行一次分区分配:

同一个 Consumer Group 内新增消费者。

消费者离开当前所属的Consumer Group,包括shuts down或crashes。

Range分区分配策略

Range是对每个Topic而言的(即一个Topic一个Topic分),首先对同一个Topic里面的分区按照序号进行排序,并对消费者按照字母顺序进行排序。然后用Partitions分区的个数除以消费者线程的总数来决定每个消费者线程消费几个分区。如果除不尽,那么前面几个消费者线程将会多消费一个分区。假设n=分区数/消费者数量,m=分区数%消费者数量,那么前m个消费者每个分配n+1个分区,后面的(消费者数量-m)个消费者每个分配n个分区。假如有10个分区,3个消费者线程,把分区按照序号排列

0,1,2,3,4,5,6,7,8,9

消费者线程为

C1-0,C2-0,C2-1

那么用partition数除以消费者线程的总数来决定每个消费者线程消费几个partition,如果除不尽,前面几个消费者将会多消费一个分区。在我们的例子里面,我们有10个分区,3个消费者线程,10/3 = 3,而且除除不尽,那么消费者线程C1-0将会多消费一个分区,所以最后分区分配的结果看起来是这样的:

C1-0:0,1,2,3

C2-0:4,5,6

C2-1:7,8,9

如果有11个分区将会是:

C1-0:0,1,2,3

C2-0:4,5,6,7

C2-1:8,9,10

假如我们有两个主题T1,T2,分别有10个分区,最后的分配结果将会是这样:

C1-0:T1(0,1,2,3) T2(0,1,2,3)

C2-0:T1(4,5,6) T2(4,5,6)

C2-1:T1(7,8,9) T2(7,8,9)

RoundRobinAssignor分区分配策略

RoundRobinAssignor策略的原理是将消费组内所有消费者以及消费者所订阅的所有topic的partition按照字典序排序,然后通过轮询方式逐个将分区以此分配给每个消费者. 使用RoundRobin策略有两个前提条件必须满足:

同一个消费者组里面的所有消费者的num.streams(消费者消费线程数)必须相等;每个消费者订阅的主题必须相同。加入按照 hashCode 排序完的topic-partitions组依次为

T1-5, T1-3, T1-0, T1-8, T1-2, T1-1, T1-4, T1-7, T1-6, T1-9

我们的消费者线程排序为

C1-0, C1-1, C2-0, C2-1

最后分区分配的结果为:

C1-0 将消费 T1-5, T1-2, T1-6 分区

C1-1 将消费 T1-3, T1-1, T1-9 分区

C2-0 将消费 T1-0, T1-4 分区

C2-1 将消费 T1-8, T1-7 分区

StickyAssignor分区分配策略

Kafka从0.11.x版本开始引入这种分配策略,它主要有两个目的:

分区的分配要尽可能的均匀,分配给消费者者的主题分区数最多相差一个 分区的分配尽可能的与上次分配的保持相同。当两者发生冲突时,第一个目标优先于第二个目标。鉴于这两个目的,StickyAssignor策略的具体实现要比RangeAssignor和RoundRobinAssignor这两种分配策略要复杂很多。

假设消费组内有3个消费者

C0、C1、C2

他们都订阅了4个主题:

t0、t1、t2、t3

并且每个主题有2个分区,也就是说整个消费组订阅了

t0p0、t0p1、t1p0、t1p1、t2p0、t2p1、t3p0、t3p1这8个分区

最终的分配结果如下:

消费者C0:t0p0、t1p1、t3p0

消费者C1:t0p1、t2p0、t3p1

消费者C2:t1p0、t2p1

这样初看上去似乎与采用RoundRobinAssignor策略所分配的结果相同

此时假设消费者C1脱离了消费组,那么消费组就会执行再平衡操作,进而消费分区会重新分配。如果采用RoundRobinAssignor策略,那么此时的分配结果如下:

消费者C0:t0p0、t1p0、t2p0、t3p0

消费者C2:t0p1、t1p1、t2p1、t3p1

如分配结果所示,RoundRobinAssignor策略会按照消费者C0和C2进行重新轮询分配。而如果此时使用的是StickyAssignor策略,那么分配结果为:

消费者C0:t0p0、t1p1、t3p0、t2p0

消费者C2:t1p0、t2p1、t0p1、t3p1

可以看到分配结果中保留了上一次分配中对于消费者C0和C2的所有分配结果,并将原来消费者C1的“负担”分配给了剩余的两个消费者C0和C2,最终C0和C2的分配还保持了均衡。

如果发生分区重分配,那么对于同一个分区而言有可能之前的消费者和新指派的消费者不是同一个,对于之前消费者进行到一半的处理还要在新指派的消费者中再次复现一遍,这显然很浪费系统资源。StickyAssignor策略如同其名称中的“sticky”一样,让分配策略具备一定的“粘性”,尽可能地让前后两次分配相同,进而减少系统资源的损耗以及其它异常情况的发生。

到目前为止所分析的都是消费者的订阅信息都是相同的情况,我们来看一下订阅信息不同的情况下的处理。

举例,同样消费组内有3个消费者:

C0、C1、C2

集群中有3个主题:

t0、t1、t2

这3个主题分别有

1、2、3个分区

也就是说集群中有

t0p0、t1p0、t1p1、t2p0、t2p1、t2p2这6个分区

消费者C0订阅了主题t0

消费者C1订阅了主题t0和t1

消费者C2订阅了主题t0、t1和t2

如果此时采用RoundRobinAssignor策略:

消费者C0:t0p0

消费者C1:t1p0

消费者C2:t1p1、t2p0、t2p1、t2p2

如果此时采用的是StickyAssignor策略:

消费者C0:t0p0

消费者C1:t1p0、t1p1

消费者C2:t2p0、t2p1、t2p2

此时消费者C0脱离了消费组,那么RoundRobinAssignor策略的分配结果为:

消费者C1:t0p0、t1p1

消费者C2:t1p0、t2p0、t2p1、t2p2

StickyAssignor策略,那么分配结果为:

消费者C1:t1p0、t1p1、t0p0

消费者C2:t2p0、t2p1、t2p2

可以看到StickyAssignor策略保留了消费者C1和C2中原有的5个分区的分配:

t1p0、t1p1、t2p0、t2p1、t2p2。

从结果上看StickyAssignor策略比另外两者分配策略而言显得更加的优异,这个策略的代码实现也是异常复杂。

kafka的offset怎么维护

Kafka 0.9版本之前,consumer默认将offset保存在Zookeeper中。

从0.9版本开始,consumer默认将offset保存在Kafka一个内置的topic中,该topic为__consumer_offsets。

额外补充:实际开发场景中在Spark和Flink中,可以自己手动提交kafka的offset,或者是flink两阶段提交自动提交offset。

kafka为什么这么快

  1. Kafka本身是分布式集群,同时采用分区技术,并发度高。
  2. 顺序写磁盘

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

  1. 零拷贝技术

零拷贝并不是不需要拷贝,而是减少不必要的拷贝次数。通常是说在IO读写过程中。

传统IO流程:

第一次:将磁盘文件,读取到操作系统内核缓冲区。

第二次:将内核缓冲区的数据,copy到application应用程序的buffer。

第三步:将application应用程序buffer中的数据,copy到socket网络发送缓冲区(属于操作系统内核的缓冲区)

第四次:将socket buffer的数据,copy到网卡,由网卡进行网络传输。

传统方式,读取磁盘文件并进行网络发送,经过的四次数据copy是非常繁琐的。实际IO读写,需要进行IO中断,需要CPU响应中断(带来上下文切换),尽管后来引入DMA来接管CPU的中断请求,但四次copy是存在“不必要的拷贝”的。

重新思考传统IO方式,会注意到实际上并不需要第二个和第三个数据副本。应用程序除了缓存数据并将其传输回套接字缓冲区之外什么都不做。相反,数据可以直接从读缓冲区传输到套接字缓冲区。

显然,第二次和第三次数据copy 其实在这种场景下没有什么帮助反而带来开销,这也正是零拷贝出现的意义。

所以零拷贝是指读取磁盘文件后,不需要做其他处理,直接用网络发送出去。

Kafka消费能力不足怎么处理

  1. 如果是Kafka消费能力不足,则可以考虑增加Topic的分区数,并且同时提升消费组的消费者数量,消费者数=分区数。(两者缺一不可)
  2. 如果是下游的数据处理不及时:提高每批次拉取的数量。批次拉取数据过少(拉取数据/处理时间<生产速度),使处理的数据小于生产的数据,也会造成数据积压。

kafka事务是怎么实现的

Kafka从0.11版本开始引入了事务支持。事务可以保证Kafka在Exactly Once语义的基础上,生产和消费可以跨分区和会话,要么全部成功,要么全部失败。

Producer事务

为了实现跨分区跨会话的事务,需要引入一个全局唯一的Transaction ID,并将Producer获得的PID和Transaction ID绑定。这样当Producer重启后就可以通过正在进行的Transaction ID获得原来的PID。为了管理Transaction,Kafka引入了一个新的组件Transaction Coordinator。Producer就是通过和Transaction Coordinator交互获得Transaction ID对应的任务状态。Transaction Coordinator还负责将事务所有写入Kafka的一个内部Topic,这样即使整个服务重启,由于事务状态得到保存,进行中的事务状态可以得到恢复,从而继续进行。

Consumer事务

对于Consumer而言,事务的保证就会相对较弱,尤其是无法保证Commit的信息被精确消费。这是由于Consumer可以通过offset访问任意信息,而且不同的Segment File生命周期不同,同一事务的消息可能会出现重启后被删除的情况。

Kafka中的数据是有序的吗

单分区内有序。

多分区,分区与分区间无序。

Kafka可以按照时间消费数据吗

可以,提供的API方法:

KafkaUtil.fetchOffsetsWithTimestamp(topic, sTime, kafkaProp)

Kafka单条日志传输大小

kafka对于消息体的大小默认为单条最大值是1M但是在我们应用场景中, 常常会出现一条消息大于1M,如果不对kafka进行配置。则会出现生产者无法将消息推送到kafka或消费者无法去消费kafka里面的数据, 这时我们就要对kafka进行以下配置:server.properties

replica.fetch.max.bytes: 1048576  broker可复制的消息的最大字节数, 默认为1M
message.max.bytes: 1000012   kafka 会接收单个消息size的最大限制, 默认为1M左右

message.max.bytes必须小于等于replica.fetch.max.bytes,否则就会导致replica之间数据同步失败

Kafka参数优化

Broker参数配置(server.properties)

1、日志保留策略配置
# 保留三天,也可以更短 (log.cleaner.delete.retention.ms)
log.retention.hours=72

2、Replica相关配置
default.replication.factor:1 默认副本1个

3、网络通信延时
replica.socket.timeout.ms:30000 #当集群之间网络不稳定时,调大该参数
replica.lag.time.max.ms= 600000# 如果网络不好,或者kafka集群压力较大,会出现副本丢失,然后会频繁复制副本,导致集群压力更大,此时可以调大该参数。

Producer优化(producer.properties)

compression.type:none                 gzip  snappy  lz4  
#默认发送不进行压缩,推荐配置一种适合的压缩算法,可以大幅度的减缓网络压力和Broker的存储压力。

Kafka内存调整(kafka-server-start.sh)

默认内存1个G,生产环境尽量不要超过6个G。
export KAFKA_HEAP_OPTS="-Xms4g -Xmx4g"

Kafka适合以下应用场景

  1. 日志收集:一个公司可以用Kafka可以收集各种服务的log,通过kafka以统一接口服务的方式开放给各种consumer。
  2. 消息系统:解耦生产者和消费者、缓存消息等。
  3. 用户活动跟踪:kafka经常被用来记录web用户或者app用户的各种活动,如浏览网页、搜索、点击等活动,这些活动信息被各个服务器发布到kafka的topic中,然后消费者通过订阅这些topic来做实时的监控分析,亦可保存到数据库。
  4. 运营指标:kafka也经常用来记录运营监控数据。包括收集各种分布式应用的数据,生产各种操作的集中反馈,比如报警和报告;
  5. 流式处理:比如spark和flink。

Exactly Once语义

将服务器的ACK级别设置为-1,可以保证Producer到Server之间不会丢失数据,即At Least Once语义。相对的,将服务器ACK级别设置为0,可以保证生产者每条消息只会被发送一次,即At Most Once语义。

At Least Once可以保证数据不丢失,但是不能保证数据不重复;

相对的,At Least Once可以保证数据不重复,但是不能保证数据不丢失。

但是,对于一些非常重要的信息,比如说交易数据,下游数据消费者要求数据既不重复也不丢失,即Exactly Once语义。在0.11版本以前的Kafka,对此是无能为力的,只能保证数据不丢失,再在下游消费者对数据做全局去重。对于多个下游应用的情况,每个都需要单独做全局去重,这就对性能造成了很大影响。

0.11版本的Kafka,引入了一项重大特性:幂等性。

开启幂等性enable.idempotence=true。

所谓的幂等性就是指Producer不论向Server发送多少次重复数据,Server端都只会持久化一条。幂等性结合At Least Once语义,就构成了Kafka的Exactly Once语义。即:

At Least Once + 幂等性 = Exactly Once

Kafka的幂等性实现其实就是将原来下游需要做的去重放在了数据上游。开启幂等性的Producer在初始化的时候会被分配一个PID,发往同一Partition的消息会附带Sequence Number。而Broker端会对<PID, Partition, SeqNumber>做缓存,当具有相同主键的消息提交时,Broker只会持久化一条。

但是PID重启就会变化,同时不同的Partition也具有不同主键,所以幂等性无法保证跨分区跨会话的Exactly Once。

补充,在流式计算中怎么Exactly Once语义?以flink为例

  1. souce:使用执行ExactlyOnce的数据源,比如kafka等

内部使用FlinkKafakConsumer,并开启CheckPoint,偏移量会保存到StateBackend中,并且默认会将偏移量写入到topic中去,即_consumer_offsets Flink设置
CheckepointingModel.EXACTLY_ONCE

  1. sink

存储系统支持覆盖也即幂等性:如Redis,Hbase,ES等 存储系统不支持覆:需要支持事务(预写式日志或者两阶段提交),两阶段提交可参考Flink集成的kafka sink的实现。

有需要资料的私信小编【学习】即可免费领取哦!!!

\

31道Hive大厂高频面试题,学会了进大厂不是梦,建议收藏! 文章目录1. 介绍一下什么是Hive2. Hive的架构原理3. Hive的HSQL转换为MapReduce的过程?4. Hive和RDBMS有什么异同/hive和传统数据库之间的区别5. HiveSQL语句不会转化为MapReduce作业的情况6. 请简单介绍一下Hive的本地模式7. 你使用过哪些 Hive 函数8. 列转行和行转列函数有哪些9. 介绍一下Hive中的窗口函数10. Hive内部表、外部表、分区表、分桶表的区别,以及各自的使用场景11. Order By,Sort By,Distrbu 阅读详情

相关推荐

【建议收藏】Kafka 面试连环炮, 看看你能撑到哪一步?

之前有粉丝留言说能否总结和分享一些 Kafka 相关的面试题。今天我们就来安排一篇关于 Kafka 的核心面试题连环炮, 从「」、「」、「」 三个方向梳理面试题,希望在金三银四的关键节点可以帮助到大家。由于内容很多,打算拆分成「」三篇,本文是面试系列的下篇。

m0_67322837的博客 439

精选一线大厂50道Kafka常见面试题「答案详解」!面试在也不怂了

前言 众所周知,kafka的受欢迎程度在编程界也是数一数二的,并且Kafka也拥有强劲的就业机会和职业前景。此外,在互联网时代能够拥有Kafka知识对自己也是一条快速增长的道路。故,本文收集了一些一线互联网大厂常见的Kafka面试题,并提供了详细答案,希望能帮助到大家! Kafka常见面试题大全含答案 问题1:什么是Apache Kafka? 答:Apache Kafka是一个发布 - 订阅开源消息代理应用程序。这个消息传递应用程序是用“scala”编码的。基本上,这个项目是由Apach..

weixin_59330273的博客 9538

招行面试:RocketMQ、Kafka、RabbitMQ,如何选型?

只要按照上面的 尼恩团队梳理的 方案去作答, 你的答案不是 100分,而是 120分。面试官一定是 心满意足, 五体投地。按照尼恩的梳理,进行 深度回答,可以充分展示一下大家雄厚的 “技术肌肉”,让面试官爱到 “不能自已、口水直流”,然后实现”offer直提”。在面试之前,建议大家系统化的刷一波 5000页《尼恩Java面试宝典PDF》,里边有大量的大厂真题、面试难题、架构难题。很多小伙伴刷完后, 吊打面试官, 大厂横着走。在刷题过程中,如果有啥问题,大家可以来 找 40岁老架构师尼恩交流。

架构师尼恩 2093

Kafka 面试大全,(总结)

原文链接:干货总结!Kafka 面试大全(万字长文,37 张图,28 个知识点) 大家好 周末用了整整两天时间,整理了一下Kafka面试的连环问题,保证你看完后,对 Kafka 有了更深层次的了解。 全文总结的Kafka题目之间的 关联性 很强,本文将通过问答 + 图解的形式 由浅入深 帮助大家进一步学习和理解 Kafka 分布式流式处理平台。 全文总计1.2 万字、28 个知识点。35 张原理、流程图。提纲如下: 此文已经制作成带目录的 PDF,获取本文PDF 版...

CCqwas的博客 1万+

【建议收藏】华为OD面试,什么场景下会使用到kafka,消息消费中需要注意哪些问题,kafka的幂等性,联合索引等问题

1️⃣ 生产者端处理幂等性:Kafka 生产者端可以通过设置消息 ID 和序列号等方式来处理幂等性,确保同一条消息只会被写入一次,而不会被重复写入。2️⃣ 手动处理:如果自动重试无法解决消费失败的问题,可以通过手动处理来处理消费失败的消息,比如将其保存到文件或数据库中,以便后续处理或人工处理。5️⃣ 考虑索引覆盖:如果联合索引包含所有需要查询的字段,可以使用索引覆盖,避免了额外的查询操作,提高了查询效率。6️⃣ 合理使用消息:对于不同的消息类型,要采取不同的处理方式,比如阅读、回复或转发等。

梦想橡皮擦,专栏100例写作模式先行者,现象级专栏 《Python 爬虫 100 例》作者、《滚雪球学 Python 专栏》原创者 1万+

Kafka详解及常见面试问题解析(值得珍藏)

Kafka是一个分布式消息队列,它对消息保存时根据Topic进行归类。发送消息者称为Producer,消息接受者称为Consumer。此外,Kafka集群由多个Kafka实例组成,每个实例(server)成为broker。无论是Kafka集群,还是Producer和Consumer都依赖于Zookeeper集群保存一些meta信息,来保证系统可用性。

a342874650的专栏 8303

Kafka 面试题,看这一篇就够了

Kafka基础消息系统的作用大部分小伙伴应该都清楚,这里用机油装箱举个例子:所以消息系统就是如上图我们所说的仓库,能在中间过程作为缓存,并且实现解耦合的作用。引入一个场...

xmt1139057136的专栏 1万+

kafka面试题参考

kafka面试题参考,kafka面试题参考,kafka面试题参考,kafka面试题参考,kafka面试题参考,kafka面试题参考

这可能是你见过大数据岗位最全,最规范的面试准备大纲 !(建议收藏)

        本篇博客所分享的知识非常硬核,建议各位看官(尤其是大数据专业的同学啊),赶紧搬好小板凳,带好西瓜,我们边看边吃瓜。 说错了,是带着小本,边看边记下来 申明:本篇仅仅只是作为一个大纲目录,具体内容我会在后续详细展开说明! 为什么这么说,继续往下看大家就明白了~ 文章目录【第一章】 面试说明1.1 面试过程最关键的是什么?1.2 面试时该怎么说?1.3 面试技巧1.3.1 六个常见问题1.3.2 两个注意事项1

大数据梦想家 1万+

芯片硅前验证技术与驱动工程师实战指南

硅前验证是芯片开发流程中的关键环节,通过pre-silicon simulation等技术手段在流片前验证设计正确性。其核心技术包括软件仿真、FPGA原型验证和硬件仿真器解决方案,涉及Linux驱动开发、芯片架构理解和波形分析等核心技能。作为连接芯片设计与系统集成的桥梁,硅前验证能早期发现设计缺陷,节省数百万美元流片成本。以Cadence Palladium为代表的硬件仿真器,通过专用服务器系统实现比纯软件方案快100-1000倍的仿真速度,为驱动工程师提供完整的外设模型验证环境。掌握硅前验证技术可显著提升

weixin_42522857的博客 328

Word中 Go to endnote 出现闪退问题解决办法

Word中 Go to endnote 出现闪退问题解决办法

努力努力努力 1万+

Kafka面试准备,收藏这一篇就够了!!!

kafka是面试的重中之重,此篇总结完整,收藏这一篇就够了

悦上心灵的博客 320

RoboMaster电控入门:手把手教你用STM32CubeMX配置大疆C板CAN总线驱动GM6020电机

本文详细介绍了如何使用STM32CubeMX配置大疆C板CAN总线驱动GM6020电机,适用于RoboMaster电控入门。从硬件准备到CubeMX工程初始化,再到CAN过滤器配置和电机控制协议解析,手把手教你避开常见配置陷阱,实现精准控制。

weixin_42524762的博客 269

2021超全大数据面试宝典,吐血总结十万字,大数据面试收藏这一篇就够了

本文最新版已发布至公众号【五分钟学大数据】 获取此套面试题最新pdf版,请搜索公众号【五分钟学大数据】,对话框发送面试宝典 扫码获取最新PDF版: 版本 时间 描述 V1.0 2020-02-18 创建 V1.2 2020-06-17 新增 spark 、flink相关面试题 V1.3 ...

yuan_more的博客 1万+

CST仿真实例001:圆极化平板天线仿真

CST仿真实例001:圆极化平板天线仿真实例

weixin_47638568的博客 1万+

《UDS协议从入门到精通》系列——图解0x34:请求下载

上传下载类服务之0x34-请求下载,图解请求+响应格式,直观易懂,快速上手!!

车载系统攻城狮 4931

【前端】【面试】面试前准备

面试简历与准备要点 技术型简历准备:简历是面试的敲门砖,需结构清晰、内容突出,避免视觉噪音。基本信息(姓名、电话、邮箱、求职意向)必填,其他如博客、学历等需谨慎选择是否展示。专业技能描述应准确区分“了解”“熟悉”“精通”,避免夸大或堆砌无关技术。工作经历需体现稳定性与成长性,避免频繁跳槽或长期初级岗位。项目经历是重点,需避免流水账写法、堆积低质量项目或造假,应突出项目概述、个人职责、难点与成果。 面试前准备:校招需系统梳理前端知识点,展现学习潜力;社招则需针对性强化业务相关技术细节,匹配岗位需求。利用脑图整

weixin_56334307的博客 1002

pycharm一直选择不了conda正确路径弹框报错:latinit property envs_dirs has not been initialized...如何解决?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。

**My Coding Family** 2924

字节Java面试必问:真的,搞定kafka看这一篇就够了_工作1年的java不会kafka

Kafka 集群包含一个或多个服务器,每个 Kafka 中服务器被称为 broker。broker 接收来自生产者的消息,为消息设置偏移量,并提交消息到磁盘保存。broker 为消费者提供服务,对读取分区的请求作出响应,返回已经提交到磁盘上的消息。broker 是集群的组成部分,每个集群中都会有一个 broker 同时充当了的角色,它是由集群中的活跃成员选举出来的。每个集群中的成员都有可能充当 Leader,Leader 负责管理工作,包括将分区分配给 broker 和监控 broker。

2401_87167773的博客 1313

硬件基础知识-电机知识

步进电机存在空载启动频率,所以步进电机可以低速正常运转,但若高于一定速度时就无法启动,并伴有尖锐的啸叫声;在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数。给电机两根线供电,电机就可以旋转,给正电压,电机正转,给相反电压,电机反转;电压越大,电机转得越快,电压越小,转速也变小。是一种直流电机,有刷电机的定子上安装有固定的主磁极和电刷,转子上安装有电枢绕组和换向器。控制器:使用专用的电子控制器来监测和控制电机的转速、电流和方向。线圈电流方向的交替变化是随电机转动的换相器和电刷来完成的。

weixin_46969363的博客 2297

Cesium 实战 04 - 标绘功能系列之画点(draw point)

Cesium 实战 - 标绘功能之画点(draw point)。

非科班Java出身GISer的博客 1085

Kafka面试准备,收藏这一篇就够了

现在在脑海过一遍以下问题,是否能够回忆清楚为什么要用消息队列?为什么选择了kafka?kafka的组件与作用(架构)?kafka为什么要分区?Kafka生产者分区策略?kafka的数据可靠性怎么保证?(丢,重)kafka的副本机制?kafka的消费分区分配策略?kafka的offset怎么维护?kafka为什么这么快?(高效读写数据)Kafka消息数据积压,Kafka消费能力不足怎么处理?kafka事务是怎么实现的?Kafka中的数据是有序的吗?Kafka可以按照时间消费数据?Kafka单条日志传输大小?K

weixin_70730532的博客 177

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Kafka 面试专题宝典,资深程序员版

不要只背概念:理解Kafka为什么这样设计,解决了什么问题结合实际场景:能够根据具体业务需求选择合适的配置性能调优经验:有过生产环境性能问题的排查和解决经验监控和运维:了解如何监控Kafka集群健康状态。

ly853602的博客 6821

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

金九银十已到,大厂面试大全+面试经历都在这了(建议收藏)

疫情到现在已经持续有3年的时间了,由于疫情的影响,无数行业都受到了影响,互联网寒冬下,许多程序员被裁,大环境格外困难。 我发现一个奇怪的现象:那些跳槽的人,总是从一个坑,跳进令一个坑中。毕竟一年过去了,会的还是原来的知识,人的身价就摆在那里,无论怎么折腾,也不会拿到更好的 offer。这样的跳槽其实没有意义,也许就有人问,现在都是互联网寒冬了,要怎样才能把握好机会,拿到跟好跟适合自己的 offer 呢?技术才是我们程序员的立身之本,在再好的机遇面前我们也要有这个实力去抓住它。

qingyangcc123的博客 1949

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

面试前的准备

由于我做了比较长时间的技术面试官,根据我的面试体会,不少同学收到面试后,什么准备也不会做,到时候问题就来了。      这样做的后果是:不知彼,不知己,每战必殆。哪怕侥幸面试成,工资一定会被压得很低。    其实公司肯花时间让你去面试,前提条件一定是通过你的简历,一定发现了你和公司的匹配点,也就是说,一定是有录用意向的。    ...

qazqwerqaz的博客 249

高级java后端开发面试-面试前的准备

其实公司肯花时间让你去面试,前提条件一定是通过你的简历,一定发现了你和公司的匹配点,也就是说,一定是有录用意向的。 在技术面试的时间段里(最长1个小时),你如果能展现你的优势那是最好的,但如果你做不到这点,简单点,让面试官感觉你达到了最低标准即可。这好比在大学里考试,有些同学对某门课的知识点完全不懂,但也有可能通过考前突击和刷题来通过考试(不作弊),而且还有可能考高分。 至于通过技术面试后,项目经理或人事的面试一般是过滤特别差的,比如考察些团队协作能力和沟通表达能力等,这对大家来说应该不是问题。所以在本文里

kkkllllss的博客 1387
上一篇: MySQL面试(三)
下一篇: 一文就够!SpringBoot拦截器及源码分析
程序员职业指南
博客等级 码龄4年 2138粉丝 960原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值