面试题百日百刷-kafka篇(三)

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

1.如何保证Kafka的消息有序**

Kafka对于消息的重复、丢失、错误以及顺序没有严格的要求。

Kafka只能保证一个partition中的消息被某个consumer消费时是顺序的,事实上,从Topic角度来说,当有多个partition时,消息仍然不是全局有序的。

2.kafka数据丢失问题,及如何保证**

1)数据丢失:

acks=1的时候(只保证写入leader成功),如果刚好leader挂了。数据会丢失。

acks=0的时候,使用异步模式的时候,该模式下kafka无法保证消息,有可能会丢。

2)brocker如何保证不丢失:

acks=all : 所有副本都写入成功并确认。

retries = 一个合理值。

min.insync.replicas=2 消息至少要被写入到这么多副本才算成功。

unclean.leader.election.enable=false 关闭unclean leader选举,即不允许非ISR中的副本被选举为leader,以避免数据丢失。

3)Consumer如何保证不丢失

如果在消息处理完成前就提交了offset,那么就有可能造成数据的丢失。

enable.auto.commit=false 关闭自动提交offset

处理完数据之后手动提交。

3.kafka的balance是怎么做的**

官方原文

Producers publish data to the topics of their choice. The producer is able to choose which message

to assign to which partition within the topic. This can be done in a round-robin fashion simply to

balance load or it can be done according to some semantic partition function (say based on some

key in the message). More on the use of partitioning in a second. 翻译:

生产者将数据发布到他们选择的主题。生产者可以选择在主题中分配哪个分区的消息。这可以通过循环的方式来完成,只是为了平衡负载,或者可以根据一些语义分区功能(比如消息中的一些键)来完成。更多关于分区在一秒钟内的使用。

4.kafka的消费者方式**

consumer采用pull(拉)模式从broker中读取数据。

push(推)模式很难适应消费速率不同的消费者,因为消息发送速率是由broker决定的。它的目标是尽可能以最快速度传递消息,但是这样很容易造成consumer来不及处理消息,典型的表现就是拒绝服务以及网络拥塞。

而pull模式则可以根据consumer的消费能力以适当的速率消费消息。

对于Kafka而言,pull模式更合适,它可简化broker的设计,consumer可自主控制消费消息的速率,同时consumer可以自己控制消费方式——即可批量消费也可逐条消费,同时还能选择不同的提交方式从而实现不同的传输语义。

pull模式不足之处是,如果kafka没有数据,消费者可能会陷入循环中,一直等待数据到达。为了避免这种情况,我们在我们的拉请求中有参数,允许消费者请求在等待数据到达的“长轮询”中进行阻塞。

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

你可能感兴趣的:(后端面试kafka)