Kafka 技术原理---更新中

Kafka 分布式的情况下,如何保证消息的顺序?

    同一个 Partition 用一个 write ahead log 组织,所以可以保证 FIFO 的顺序。
    不同 Partition 之间不能保证顺序。但是绝大多数用户都可以通过 message key 来定义,因为同一个
key 的 message 可以保证只发送到同一个 Partition。比如说 key 是 user id,table row id 等等,所以同
一个 user 或者同一个 record 的消息永远只会发送到同一个 Partition上,保证了同一个 user 或 record 
的顺序。

Kafka 的设计思路

1)Kafka 将消息以 topic 为单位进行归纳
2)将向 Kafka topic 发布消息的程序成为 producers.
3)将预订 topics 并消费消息的程序成为 consumer.
4)Kafka 以集群的方式运行,可以由一个或多个服务组成,每个服务叫做一个 broker.
5)producers 通过网络将消息发送到 Kafka 集群,集群向消费者提供消息

数据传输的事务定义通常有以下三种级别

1)最多一次: 消息不会被重复发送,最多被传输一次,但也有可能一次不传输
2)最少一次: 消息不会被漏发送,最少被传输一次,但也有可能被重复传输.
3)精确的一次(Exactly once): 不会漏传输也不会重复传输,每个消息都传输被一次而且仅仅被传输
一次,这是大家所期望的

Kafka 判断一个节点是否还活着有那两个条件?

1)节点必须可以维护和 ZooKeeper 的连接,Zookeeper 通过心跳机制检查每个节点的连接
2)如果节点是个 follower,他必须能及时的同步 leader 的写操作,延时不能太久

producer 是否直接将数据发送到 broker 的 leader(主节点)?

    producer 直接将数据发送到 broker 的 leader(主节点),不需要在多个节点进行分发,为了帮助 
producer 做到这点,所有的 Kafka 节点都可以及时的告知:哪些节点是活动的,目标topic 目标分区的
leader 在哪。

Kafa consumer 是否可以消费指定分区消息?

    Kafa consumer 消费消息时,向 broker 发出"fetch"请求去消费特定分区的消息,consumer指定消
息在日志中的偏移量(offset),就可以消费从这个位置开始的消息,customer 拥有了 offset 的控制
权,可以向后回滚去重新消费之前的消息,这是很有意义的

Kafka 消息是采用 Pull 模式,还是 Push 模式?

pull 方式,考虑下游消费者消费水品的能力

Kafka 存储在硬盘上的消息格式是什么?

消息由一个固定长度的头部和可变长度的字节数组组成。头部包含了一个版本号和 CRC32校验码。
    消息长度: 4 bytes (value: 1+4+n)
    本号: 1 byte
    RC 校验码: 4 bytes
    具体的消息: n bytes 

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

1).Kafka 把 topic 中一个 parition 大文件分成多个小文件段,通过多个小文件段,就容易定期清除或
删除已经消费完文件,减少磁盘占用。
2).通过索引信息可以快速定位 message 和确定 response 的最大大小。
3).通过 index 元数据全部映射到 memory,可以避免 segment file 的 IO 磁盘操作。
4).通过索引文件稀疏存储,可以大幅降低 index 文件元数据占用空间大小。

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

1).Kafka 持久化日志,这些日志可以被重复读取和无限期保留
2).Kafka 是一个分布式系统:它以集群的方式运行,可以灵活伸缩,在内部通过复制数据 提升容错能
力和高可用性
3).Kafka 支持实时的流式处理

kafka 的 ack 机制

request.required.acks 有三个值 0 1 -1
    0:生产者不会等待 broker 的 ack,这个延迟最低但是存储的保证最弱当 server 挂掉的时候就会丢数据
    1:服务端会等待 ack 值 leader 副本确认接收到消息后发送 ack 但是如果 leader 挂掉后他不确保
       否复制完成新 leader 也会导致数据丢失
    -1:同样在 1 的基础上 服务端会等所有的 follower 的副本受到数据后才会受到 leader 发出的 ack,这样数据不会丢失

Kafka 的消费者如何消费数据

    消费者每次消费数据的时候,消费者都会记录消费的物理偏移量(offset)的位置等到下次消费
时,他会接着上次位置继续消费

消费者负载均衡策略

    一个消费者组中的一个分片对应一个消费者成员,他能保证每个消费者成员都能访问,如果组中成
员太多会有空闲的成员

数据有序

    一个消费者组里它的内部是有序的
    消费者组与消费者组之间是无序的

kafka 生产数据时数据的分组策略

    生产者决定数据产生到集群的哪个 partition 中每一条消息都是以(key,value)格式
    Key 是由生产者发送数据传入所以生产者(key)决定了数据产生到集群的哪个 partition
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值