宝塔服务器面板,一键全能部署及管理,送你10850元礼包,点我领取

1.Kafka的设计时是什么样的?

Kafka以主题为单位总结了消息

将向Kafka主题发布消息的程序设为producers。

预约topics,使消耗消息的程序成为consumer。

Kafka充当群集,可以由一个或多个服务组成。 每个服务都称为broker。

producers通过网络向Kafka集群发送消息,集群向消费者提供消息

2 .数据传输的事物定义有哪些三种?

数据传输的事务定义通常有三个级别:

1)最多一次:消息不重复发送,最多发送一次,但是也有可能一次也不发送

)最少传输一次:消息,最少传输一次,但也有可能重复传输。

)3)准确的一次:没有传输遗漏和重复传输,并且每条消息传输一次

被期待只被转发一次

3.Kafka判断一个节点是否还活着有这两个条件吗?

)1)节点必须能够保持与ZooKeeper的连接,ZooKeeper通过心跳机制检查各节点的连接

连接起来

)2)如果节点是follower,他必须能够立即同步leader的写入,延迟不会太长

4.producer是否直接将数据发送到broker的主节点?

producer直接将数据发送到broker的主节点leader ),而无需在多个节点上分发。 为此,请

帮助producer实现这一点,所有Kafka节点都能够及时通知:中的哪个节点是活动的,是目标

主题目标分区的leader在哪里? 这样,producer就可以将消息直接发送到目标

5、Kafa consumer是否可以消耗指定的分区消息?

Kafa consumer消耗消息时,要求中介发出“fetch”以消耗特定分区的消息,consumer

通过指定日志中消息的“偏移”offset ),可以消耗来自此位置的消息。 客户拥有

获得offset的控制权,可以向后回滚和重新使用前面的消息是很有意义的

6、Kafka消息是采用推送模式还是推送模式?

Kafka考虑的第一个问题是,客户是应该从brokes中提取消息,还是brokers推送消息

consumer,即pull返回推式。 在这方面,Kafka遵循了大多数消息系统共有的传统

的设计: producer将消息推送到中介,consumer从中介中提取消息

一些消息系统如Scribe和Apache Flume )采用推送模式,将消息传递到下游的

消费者。 这样做有好处也有坏处。 broker确定消息的推送速率,并确定不同消耗速率的

consumer处理得不太好。 消息系统致力于使consumer以最大速度最快地消除消耗

但是,遗憾的是,在推送模式下,当broker以比consumer多得多的速度进行推送时,

consumer可能会崩溃。 毕竟Kafka选择了传统的拉动模式

拉动模式的另一个好处是,consumer可以自主决定是否从中介批量提取数据。 推送

模型必须在不知道下游消费者的消费能力和消费策略的情况下,立即决定是否推送所有消息

缓存后批量推送。 如果为了避免consumer崩溃而降低推送速率,则可能为1

只推送很少的消息是徒劳的。 在拉动模式下,消费者可以根据自己的消费能力来决定

制定这些策略

Pull有缺点。 如果broker中没有可用的信息,consumer将在循环中继续轮询

直到新消息到达t们。 为了避免这种情况,Kafka有一个参数,通知consumer阻止了新消息到达

当然,也可以阻止和大量发送消息的数量达到某个特定量

7.Kafka保存在硬盘上的消息格式是什么?

消息由固定长度的标头和可变长度的字节数组组成。 头部包含版本号和CRC32

核对数位。

消息长度:4字节值:14 n ) )。

: 1字节版本

CRC校验码: 4字节

具体消息: n字节

8.Kafka高效文件存储设计的特点:

)1).Kafka很容易通过将topic中的一个parition大文件分成多个小文件段并通过多个小文件段来确定

清除或删除已使用的文件以减少磁盘使用量。

2) .通

过索引信息可以快速定位 message 和确定 response 的最大大小。

3).通过 index 元数据全部映射到 memory,可以避免 segment file 的 IO 磁盘操作。

4).通过索引文件稀疏存储,可以大幅降低 index 文件元数据占用空间大小。

9.Kafka 与传统消息系统之间有三个关键区别

1).Kafka 持久化日志,这些日志可以被重复读取和无限期保留

2).Kafka 是一个分布式系统:它以集群的方式运行,可以灵活伸缩,在内部通过复制数据

提升容错能力和高可用性

3).Kafka 支持实时的流式处理

10.Kafka 创建 Topic 时如何将分区放置到不同的 Broker 中

副本因子不能大于 Broker 的个数;

第一个分区编号为 0)的第一个副本放置位置是随机从 brokerList 选择的;

其他分区的第一个副本放置位置相对于第 0 个分区依次往后移。也就是如果我们有 5 个

Broker,5 个分区,假设第一个分区放在第四个 Broker 上,那么第二个分区将会放在第五

个 Broker 上;第三个分区将会放在第一个 Broker 上;第四个分区将会放在第二个

Broker 上,依次类推;

剩余的副本相对于第一个副本放置位置其实是由 nextReplicaShift 决定的,而这个数也是

随机产生的

11.Kafka 新建的分区会在哪个目录下创建

在启动 Kafka 集群之前,我们需要配置好 log.dirs 参数,其值是 Kafka 数据的存放目录,

这个参数可以配置多个目录,目录之间使用逗号分隔,通常这些目录是分布在不同的磁盘

上用于提高读写性能。

当然我们也可以配置 log.dir 参数,含义一样。只需要设置其中一个即可。

如果 log.dirs 参数只配置了一个目录,那么分配到各个 Broker 上的分区肯定只能在这个

目录下创建文件夹用于存放数据。

但是如果 log.dirs 参数配置了多个目录,那么 Kafka 会在哪个文件夹中创建分区目录呢?

答案是:Kafka 会在含有分区目录最少的文件夹中创建新的分区目录,分区目录名为 Topic

名+分区 ID。注意,是分区文件夹总数最少的目录,而不是磁盘使用量最少的目录!也就

是说,如果你给 log.dirs 参数新增了一个新的磁盘,新的分区目录肯定是先在这个新的磁

盘上创建直到这个新的磁盘目录拥有的分区目录不是最少为止。

12.partition 的数据如何保存到硬盘

topic 中的多个 partition 以文件夹的形式保存到 broker,每个分区序号从 0 递增,

且消息有序

Partition 文件下有多个 segmentxxx.index,xxx.log)

segment 文件里的 大小和配置文件大小一致可以根据要求修改 默认为 1g

如果大小大于 1g 时,会滚动一个新的 segment 并且以上一个 segment 最后一条消息的偏移

量命名

13.kafka 的 ack 机制

request.required.acks 有三个值 0 1 -1

0:生产者不会等待 broker 的 ack,这个延迟最低但是存储的保证最弱当 server 挂掉的时候

就会丢数据

1:服务端会等待 ack 值 leader 副本确认接收到消息后发送 ack 但是如果 leader 挂掉后他

不确保是否复制完成新 leader 也会导致数据丢失

-1:同样在 1 的基础上 服务端会等所有的 follower 的副本受到数据后才会受到 leader 发出

的 ack,这样数据不会丢失

14.Kafka 的消费者如何消费数据

消费者每次消费数据的时候,消费者都会记录消费的物理偏移量offset)的位置

等到下次消费时,他会接着上次位置继续消费

15.消费者负载均衡策略

一个消费者组中的一个分片对应一个消费者成员,他能保证每个消费者成员都能访问,如

果组中成员太多会有空闲的成员

16.数据有序

一个消费者组里它的内部是有序的

消费者组与消费者组之间是无序的

17.kafaka 生产数据时数据的分组策略

生产者决定数据产生到集群的哪个 partition 中

每一条消息都是以key,value)格式

Key 是由生产者发送数据传入

所以生产者key)决定了数据产生到集群的哪个 partition