每天为大家分享一些面试题,希望能帮助大家更好地运用专业知识来提醒自己。
1. Kafka的设计是什么样的?
2. 数据传输的事务定义有哪几种类型?
数据传输的事务定义通常包括以下三种级别:
(1) 最多一次:消息不会重复发送,最多传输一次,但可能一次都不传输。 (2) 最少一次:消息不会遗漏,至少传输一次,但可能重复传输。 (3) 准确的一次(Exactly Once):消息既不会遗漏也不会重复传输,每个消息都只传输一次。这是理想的状态。
3. Kafka判断一个节点是否存活的两个条件是什么?
(1) 节点必须能够维持与ZooKeeper的连接,ZooKeeper通过心跳机制检查每个节点的连接状态。 (2) 如果节点是跟随者,它必须能够及时同步领导者的所有写操作,延迟不能太大。
4. 生产者可以直接将数据发送到代理的领导者吗?
生产者可以直接将数据发送到代理的领导者,无需在多个节点间进行分发。为了实现这一点,所有的Kafka节点都会及时通知哪些节点是活跃的,以及目标主题和分区的领导者在哪里。这样,生产者就能直接将消息发送到目的地。
5. Kafka消费者能否消费指定分区的消息?
Kafka消费者在消费消息时,会向代理发出“获取”请求以消费特定分区的消息。消费者可以指定消息在日志中的偏移量,从而从该位置开始消费消息。消费者拥有偏移量的控制权,可以回滚以重新消费之前的消息,这非常有用。
6. Kafka消息是采用拉取模式还是推送模式?
最初,Kafka考虑的问题是,消费者是从代理拉取消息还是代理将消息推送给消费者。在这方面,Kafka遵循了大多数消息系统的传统设计:生产者将消息推送到代理,而消费者从代理拉取消息。
一些消息系统如Scribe和Apache Flume采用了推送模式,将消息推送给下游消费者。这样做有利有弊:由代理决定消息推送的速度,这对于不同消费速度的消费者来说难以处理。消息系统致力于让消费者以最快速度消费消息,但不幸的是,在推送模式下,如果代理推送的速度远高于消费者的消费速度,消费者可能会崩溃。最终,Kafka选择了传统的拉取模式。
拉取模式的优点之一是消费者可以根据自身消费能力自主决定是否批量拉取消息。在推送模式下,代理需要在不了解下游消费者消费能力和策略的情况下决定是否立即推送每条消息或批量推送。如果为了避免消费者崩溃而采用较低的推送速度,则可能导致推送的消息数量较少,造成浪费。在拉取模式下,消费者可以根据自己的消费能力决定这些策略。
拉取模式的一个缺点是,如果代理没有可消费的消息,消费者将不断地在循环中轮询,直到有新消息到达。为了避免这种情况,Kafka有一个参数可以让消费者阻塞直到新消息到达,或者阻塞直到消息数量达到某个特定值,以便批量拉取。
7. Kafka存储在硬盘上的消息格式是什么?
消息由固定长度的头部和可变长度的字节数组组成。头部包含一个版本号和CRC32校验码。
8. Kafka高效文件存储设计的特点有哪些?
(1) Kafka将主题中的一个分区大文件分割成多个小文件段,通过多个小文件段,便于定期清理或删除已消费完毕的文件,减少磁盘占用。 (2) 通过索引信息可以快速定位消息和确定响应的最大大小。 (3) 通过索引元数据全部映射到内存中,可以避免对文件段的磁盘I/O操作。 (4) 通过稀疏存储索引文件,可以大幅降低索引文件元数据的占用空间。
9. Kafka与传统消息系统之间有三个关键区别是什么?
(1) Kafka持久化日志,这些日志可以被反复读取并保存一定期限。 (2) Kafka是一个分布式系统:它以集群形式运行,可以灵活扩展,并通过复制数据增强容错性和高可用性。 (3) Kafka支持实时流处理。
10. 创建Kafka主题时如何将分区放置到不同的代理中?