Kafka

介绍

  • 是一个分布式、支持分区的(partition)、多副本的(replica),基于zookeeper协调的分布式消息系统。用scala语言编写
  • 以时间复杂度为O(1)的方式提供消息持久化能力
  • 大数据场景
    1. 基于hadoop的批处理系统
    2. 低延迟的实时系统:storm/Spark流式处理引擎
    3. web/nginx日志、访问日志
  • 特性
    1. 高吞吐量、低延迟:kafka每秒可以处理几十万条消息,它的延迟最低只有几毫秒,每个topic可以分多个partition, consumer group 对partition进行consume操作。
    2. 可扩展性:kafka集群支持热扩展
    3. 持久性、可靠性:消息被持久化到本地磁盘,并且支持数据备份防止数据丢失
    4. 容错性:允许集群中节点失败(若副本数量为n,则允许n-1个节点失败)
    5. 高并发:支持数千个客户端同时读写

设计重点

  1. 磁盘持久化数据:顺序读写,零拷贝(zero copy)
  2. 数据失效机制:过期时间或者最大容量
  3. 基于Partition的Replication,Partition的索引是稀疏矩阵存储
  4. leader机制

leader机制

Kafka动态维护了1个leader和一个同步状态的副本集合(in-sync replicas),简称ISR,在这个集合中的节点都是和leader保持高度一致的,任何一条消息必须被这个集合中的每个节点读取并追加到日志中了,才回通知外部这个消息已经被提交了。因此这个集合中的任何一个节点随时都可以被选为leader.ISR在ZooKeeper中维护。ISR中有f+1个节点,就可以允许在f个节点down掉的情况下不会丢失消息并正常提供服。ISR的成员是动态的,如果一个节点被淘汰了,当它重新达到“同步中”的状态时,他可以重新加入ISR.这种leader的选择方式是非常快速的,适合kafka的应用场景。 当所有的ISR都down掉时,必须及时作出反应。可以有以下两种选择:

  1. 等待ISR中的任何一个节点恢复并担任leader。
  2. 选择所有节点中(不只是ISR)第一个恢复的节点作为leader.

这是一个在可用性和连续性之间的权衡。如果等待ISR中的节点恢复,一旦ISR中的节点起不起来,那集群就永远恢复不了。如果等待ISR外的节点恢复,这个节点的数据就会被作为线上数据,有可能和真实的数据有所出入,因为有些数据它可能还没同步到。 这种窘境不只Kafka会遇到,几乎所有的分布式数据系统都会遇到。

资料

wangyaqi.cn all right reserved,powered by Gitbook该文件修订时间: 2020-04-18 15:35:02

results matching ""

    No results matching ""

    results matching ""

      No results matching ""