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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值