宝塔服务器面板,一键全能部署及管理,送你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