【大数据】Kafka高频面试题(三)

21.请说明什么是传统的消息传递方法?

传统的消息传递方法包括两种:
队列:在队列中,一组用户可以从服务器中读取消息,每条消息都发送给其中一个人
发布-订阅:在这个模型中,消息被广播给所有的用户

22.请说明Kafka相对于传统的消息传递方法有什么优势?

高性能:单一的Kafka代理可以处理成千上万的客户端,每秒处理数兆字节的读写操作,Kafka性能远超过传统的ActiveMQ、RabbitMQ等,而且Kafka支持Batch操作
可扩展:Kafka集群可以透明的扩展,增加新的服务器进集群
容错性: Kafka每个Partition数据会复制到几台服务器,当某个Broker失效时,Zookeeper将通知生产者和消费者从而使用其他的Broker

23.在Kafka中broker的意义是什么?

在Kafka集群中,broker指Kafka服务器
术语解析

名称说明
Topic主题,可以理解为一个队列
Partition分区,为了实现扩展性,一个非常大的topic可以分布到多个broker(即服务器)上,一个topic可以分为多个partition,每个partition是一个有序的队列。partition中的每条消息都会被分配一个有序的id(offset)。kafka只保证按一个partition中的顺序将消息发给consumer,不保证一个topic的整体(多个partition间)的顺序
Offset偏移量,kafka的存储文件都是按照offset.kafka来命名,用offset做名字的好处是方便查找。例如你想找位于2049的位置,只要找到2048.kafka的文件即可。当然the first offset就是00000000000.kafkaOffset
Broker一台kafka服务器就是一个broker。一个集群由多个broker组成。一个broker可以容纳多个topic
Producer消息生产者,向kafka broker发消息的客户端
Consumer消息消费者,向kafka broker取消息的客户端
Consumer Group消费者组,这是kafka用来实现一个topic消息的广播(发给所有的consumer)和单播(发给任意一个consumer)的手段。一个topic可以有多个CG。topic的消息会复制(不是真的复制,是概念上的)到所有的CG,但每个partion只会把消息发给该CG中的一个consumer。如果需要实现广播,只要每个consumer有一个独立的CG就可以了。要实现单播只要所有的consumer在同一个CG。用CG还可以将consumer进行自由的分组而不需要多次发送消息到不同的topic

24.如何保证 Kafka 中的消息是有序的?

单线程顺序消费

生产者在发送消息时,将消息对应的id进行取模处理,相同的id发送到相同的分区。消息在分区内有序,一个分区对应了一个消费者,保证了消息消费的顺序性。

多线程顺序消费

单线程顺序消费已经解决了顺序消费的问题,但是它的扩展能力很差。为了提升消费者的处理速度,但又要保证顺序性,我们只能横向扩展分区数,增加消费者。
我们可以模仿一下kafka的分区思想操作。将接收到的kafka数据进行hash取模(注意注意,你kafka分区接受消息已经是取模的了,这里一定要对id做一次hash再取模)发送到不同的队列,然后我们开启多个线程去消费对应队列里面的数据。

25.kafka数据丢失问题,及如何保证?

1)数据丢失:
acks=1的时候(只保证写入leader成功),如果刚好leader挂了。数据会丢失
acks=0的时候,使用异步模式的时候,该模式下kafka无法保证消息,有可能会丢
2)brocker如何保证不丢失:
acks=-1 : 所有副本都写入成功并确认
retries = 一个合理值
min.insync.replicas=2 消息至少要被写入到这么多副本才算成功
unclean.leader.election.enable=false 关闭unclean leader选举,即不允许非ISR中的副本被选举为leader,以避免数据丢失
3)Consumer如何保证不丢失:
如果在消息处理完成前就提交了offset,那么就有可能造成数据的丢失
enabel.auto.commit=false关闭自动提交offset
处理完数据之后手动提交

26.kafka的消费者方式?

consumer采用pull(拉)模式从broker中读取数据
push(推)模式很难适应消费速率不同的消费者,因为消息发送速率是由broker决定的。它的目标是尽可能以最快速度传递消息,但是这样很容易造成consumer来不及处理消息,典型的表现就是拒绝服务以及网络拥塞。而pull模式则可以根据consumer的消费能力以适当的速率消费消息
对于Kafka而言,pull模式更合适,它可简化broker的设计,consumer可自主控制消费消息的速率,同时consumer可以自己控制消费方式——即可批量消费也可逐条消费,同时还能选择不同的提交方式从而实现不同的传输语义
pull模式不足之处是,如果kafka没有数据,消费者可能会陷入循环中,一直等待数据到达。为了避免这种情况,我们在我们的拉请求中有参数,允许消费者请求在等待数据到达的“长轮询”中进行阻塞

27.Kafka消费过的消息如何再消费

kafka 消费消息的 offset 是定义在 zookeeper 中的,如果想重复消费 afka 的消息可以在 redis 中自己记录 offset 的 checkpoint 点 (n 个) ,当想重复消费消息时通过读取 redis 中的 checkpoint 点进行 zookeeper 的 offset 重设,这样就可以达到重复消费消息的目的了

28.Kafka重启是否会导致数据丢失

1.kafka 是将数据写到磁盘的,一般数据不会丢失
2.但是在重启 kafka 过程中,如果有消费者消费消息,那么 kafka 如果来不2及提交 offset,可能会造成数据的不准确 (丢失或者重复消费)

29.Kafka 核心组件有哪些, 分别有什么作用呢?

Kafka 核心组件的基础概念:

1)**Producer:**即消息生产者,向 Kafka Broker 发消息的客户端。
2)**Consumer:**即消息消费者,从 Kafka Broker 读消息的客户端。

3)**Consumer Group:**即消费者组,由多个 Consumer 组成。消费者组内每个消费者负责消费不同分区的数据,以提高消费能力。一个分区只能由组内一个消费者消费,不同消费者组之间互不影响
4)Broker:一台 Kafka 服务节点就是一个 Broker。一个集群是由1个或者多个 Broker 组成的,且一个 Broker 可以容纳多个 Topic。
5)**Topic:**一个逻辑上的概念,Topic 将消息分类,生产者和消费者面向的都是同一个 Topic, 同一个 Topic 下的 Partition 的消息内容是不相同的
6)**Partition:**为了实现 Topic 扩展性,提高并发能力,一个非常大的 Topic 可以分布到多个 Broker 上,一个 Topic 可以分为多个 Partition 进行存储,且每个 Partition 是消息内容是有序的
7)Replica:即副本,为实现数据备份的功能,保证集群中的某个节点发生故障时,该节点上的 Partition 数据不丢失,且 Kafka 仍然能够继续工作,为此 Kafka 提供了副本机制,一个 Topic 的每个 Partition 都有若干个副本,一个 Leader 副本和若干个 Follower 副本
8)**Leader:**即每个分区多个副本的主副本,生产者发送数据的对象,以及消费者消费数据的对象,都是 Leader
9)**Follower:**即每个分区多个副本的从副本,会实时从 Leader 副本中同步数据,并保持和 Leader 数据的同步。Leader 发生故障时,某个 Follower 还会被选举并成为新的 Leader , 且不能跟 Leader 在同一个 Broker 上, 防止崩溃数据可恢复。
10)**Offset:**消费者消费的位置信息,监控数据消费到什么位置,当消费者挂掉再重新恢复的时候,可以从消费位置继续消费。

30.Kafka 消费模型有哪些?

一般情况下消息消费总共有两种模式:「推模型」和 「拉模型」。在 Kafka 中的消费模型是属于「拉模型」,此模式的消息消费方式实现有两种:「点对点方式」和 「发布订阅方式」。

点对点方式

**点对点方式: **假如所有消费者都同属于一个消费组的话,此时所有的消息都会被分配给每一个消费者,但是消息只会被其中一个消费者进行消费

发布订阅方式

**发布订阅: **假如所有消费者属于不同的消费组,此时所有的消息都会被分配给每一个消费者,每个消费者都会收到该消息

参考资料

1.华仔聊技术
2.五分钟学大数据
3.胡夕 《Kafka 核心源码解读》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

苏书QAQ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值