锁屏面试题百日百刷,每个工作日保持更新面试题。请看到最初就能获取你想要的, 接下来的是今日的面试题:

1.解释一下,在数据制作过程中,你如何能从Kafka失去精确的信息?**

在数据中,为了准确地取得Kafka的音讯,你必须遵循两件事: 在数据耗费期间防止反复,在数据生产过程中防止反复。

这里有两种办法,能够在数据生成时精确地取得一个语义:

每个分区应用一个独自的写入器,每当你发现一个网络谬误,查看该分区中的最初一条音讯,以查看您的最初一次写入是否胜利

在音讯中蕴含一个主键(UUID或其余),并在用户中进行重复制

2.解释如何缩小ISR中的扰动?broker什么时候来到ISR?**

ISR是一组与leaders齐全同步的音讯正本,也就是说ISR中蕴含了所有提交的音讯。ISR应该总是蕴含所有的正本,直到呈现真正的故障。如果一个正本从leader中脱离进去,将会从ISR中删除。

3.Kafka为什么须要复制?**

Kafka的信息复制确保了任何已公布的音讯不会失落,并且能够在机器谬误、程序谬误或更常见些的软件降级中应用。

4.如果正本在ISR中停留了很长时间表明什么?**

如果一个正本在ISR中保留了很长一段时间,那么它就表明,跟踪器无奈像在leader收集数据那样疾速地获取数据。

5.请阐明如果首选的正本不在ISR中会产生什么?**

如果首选的正本不在ISR中,控制器将无奈将leadership转移到首选的正本。

6.Kafka有可能在生产后产生音讯偏移吗?**

在大多数队列零碎中,作为生产者的类无奈做到这一点,它的作用是触发并遗记音讯。broker将实现剩下的工作,比方应用id进行适当的元数据处理、偏移量等。

作为音讯的用户,你能够从Kafka broker中取得弥补。如果你凝视SimpleConsumer类,你会留神到它会获取包含偏移量作为列表的MultiFetchResponse对象。此外,当你对Kafka音讯进行迭代时,你会领有包含偏移量和音讯发送的MessageAndOffset对象。

7.请阐明Kafka 的音讯投递保障(delivery guarantee)机制以及如何实现?**

Kafka反对三种音讯投递语义:

① At most once 音讯可能会丢,但绝不会反复传递

② At least one 音讯绝不会丢,但可能会反复传递

③ Exactly once 每条音讯必定会被传输一次且仅传输一次,很多时候这是用户想要的

consumer在从broker读取音讯后,能够抉择commit,该操作会在Zookeeper中存下该consumer在该partition下读取的音讯的offset,该consumer下一次再读该partition时会从下一条开始读取。如未commit,下一次读取的开始地位会跟上一次commit之后的开始地位雷同。

能够将consumer设置为autocommit,即consumer一旦读到数据立刻主动commit。如果只探讨这一读取音讯的过程,那Kafka是确保了Exactly once。但实际上理论应用中consumer并非读取完数据就完结了,而是要进行进一步解决,而数据处理与commit的程序在很大水平上决定了音讯从broker和consumer的delivery guarantee semantic。

·读完音讯先commit再解决音讯。这种模式下,如果consumer在commit后还没来得及解决音讯就crash了,下次从新开始工作后就无奈读到刚刚已提交而未解决的音讯,这就对应于At most once。

·读完音讯先解决再commit生产状态(保留offset)。这种模式下,如果在解决完音讯之后commit之前Consumer crash了,下次从新开始工作时还会解决刚刚未commit的音讯,实际上该音讯曾经被解决过了,这就对应于At least once。

·如果肯定要做到Exactly once,就须要协调offset和实际操作的输入。经典的做法是引入两阶段提交,但因为许多输入零碎不反对两阶段提交,更为通用的形式是将offset和操作输出存在同一个中央。比方,consumer拿到数据后可能把数据放到HDFS,如果把最新的offset和数据自身一起写到HDFS,那就能够保证数据的输入和offset的更新要么都实现,要么都不实现,间接实现Exactly once。(目前就high level API而言,offset是存于Zookeeper中的,

无奈存于HDFS,而low level API的offset是由本人去保护的,能够将之存于HDFS中)。

总之,Kafka默认保障At least once,并且容许通过设置producer异步提交来实现At most once,而Exactly once要求与指标存储系统合作,Kafka提供的offset能够较为容易地实现这种形式。

全部内容在git上,理解更多请点我头像或到我的主页去取得,谢谢**