Kafka

Kafka简介

一、概述

  1. Kafka是LinkedIn(领英)开发后来贡献给了Apache的一套纯粹的发布订阅模式的、分布式的实时流消息队列
  2. Kafka的特征:
    1. 发布订阅消息流
    2. 允许存储消息流并且提供了容错机制
    3. 实时处理消息流
  3. Kafka的应用场景:
    1. 能够在系统或者应用之间,构建可靠的、实时的用于获取数据流的管道
    2. 能够构建一个转化或者处理数据流的应用
  4. Kafka会接收到的数据存储到本地磁盘上,而且单节点的Kafka的吞吐量是60M/s~100M/s,Kafka底层采用"零拷贝"机制

 

  1. Kafka的开发语言是Scala,基于Scala的特性,Kafka具有很好的安全性和扩展性 - 在Kafka中可以动态添加节点
  2. Kafka认不会清理日志,如果需要自动清理,那么需要在server.properties中将log.cleaner.enable的值设置为true
  3. offset机制是为了防止数据被重复处理;索引机制是为了快速定位数据

 

二、基本概念

  1. broker:经纪人
    1. 在Kafka集群中,每一个Kafka节点就是一个broker
    2. 一个broker需要分配一个唯一的编号
  2. topic:话题/主题
    1. 作用:对数据进行分类
    2. 在Kafka中,每一条数据必须指定一个topic,即每一条数据都是对应一个分类
    3. 一个topic至少要包含1个partition,可以包含多个partition
  3. partition:分区
    1. 一个partition在磁盘上都会对应一个目录,一个topic有几个partition,在磁盘上就对应了几个目录
    2. 如果存在多个分区,那么这多个分区自动平均分配到每一个Kafka节点上,这样做的目的是为了是数据的负载均衡
  4. replication:副本
    1. 保证的数据的高可用
    2. 指定几个副本,就会将当前的topic备份几个
    3. 副本数量不能超过节点数量
  5. producer:生产者。向Kafka放入数据
  6. consumer:消费者
    1. 从Kafka获取数据
    2. 在Kafka中数据可以被获取多次
  7. leader和follower:
    1. 副本之间会进行选举,自动选出一个leader副本和follower副本
    2. leader和follower说的是副本关系,和当前Kafka节点没有关系 - 一个kafka节点中既可能存在leader副本也可能存在follower副本
    3. producer和consumer在和Kafka进行交互的时候,只和leader副本进行交互
    4. leader副本的数据发生变化的时候,同步给follower副本
  8. controller:控制器
    1. 作用:在副本之后选举出一个leader副本
    2. 当Kafka集群启动的时候,Zookeeper会在Kakfa集群的某一个节点上来启动一个controller进程
    3. controller会自动在Zookeeper上注册一个临时节点,当controller进程意外结束的时候,Zookeeper上的这个节点也会随之消失,Zookeeper就会在Kafka的其他存活节点上来重新启动一个controller
    4. Zookeeper会自动给controller分配有给递增的id

 

  1. Consumer group - 消费者组:
    1. 可以将一个或者多个消费者放到一个消费者组中
    2. 如果不指定,则一个消费者对应了一个消费者组
    3. 不同的消费者组可以共享相同的数据,但是数据只能被这个消费者组中的一个消费者处理 - 组间共享,组内竞争

 

三、基本命令

命令

解释

sh kafka-topics.sh --create --zookeeper hadoop01:2181 --replication-factor 1 --partitions 1 --topic news

创建一个主题叫news

sh kafka-topics.sh --list --zookeeper hadoop01:2181

查看现在已经有的topic

sh kafka-topics.sh --delete --zookeeper hadoop01:2181 --topic video

删除topic。在删除的时候,认情况下不是立即删除,而是会等待30~60s之后才会删除

sh kafka-console-producer.sh --broker-list hadoop01:9092 --topic log

启动生产者

sh kafka-console-consumer.sh --zookeeper hadoop01:2181 --topic log

启动消费者

 

四、消息流

  1. producer产生数据之后,将数据发送给leader副本
  2. leader副本收到数据之后,会将数据写到本地的日志中,然后等待
  3. follower副本定时的给leader副本发送信号,询问是否有新的信息需要同步
  4. leader副本收到信号之后,会将新的数据发送给follower副本要求同步
  5. follower副本在收到信息之后,会将信息记录到本地日志中,如果记录成功,则会给leader副本返回一个ack
  6. leader副本收到ACK之后,会记录这个副本所对应的brokerid(ISR),同时给producer返回一个ack
  7. ISR的作用:当leader副本所在的节点宕机的时候,可以考虑从ISR队列中选择一个副本成为新的leader

 

五、消息系统语义

  1. 至少一次

 

  1. 至多一次

 

  1. 精确一次

 

六、CAP理论

  1. CAP:
    1. Consistency:一致性 - 能够获取到集群中的最新数据
    2. Availability:可用性 - 只要服务器存活,在接收请求之后能够立即返回有效结果
    3. Partition tolerance:分区容忍性 - 在集群中,不会因为一个或者几个节点宕机就导致整个集群不服务
  2. 经过数学证明,CAP三大理论无法同时满足,最多只能满足其中的2个
  3. 在分布式中,优先考虑满足P,所以导致分布式集群基本都是CP或者AP系统
  4. 一致性的分类
    1. 强一致性:当一个节点的数据产生变化的时候,其他节点能够立即感知到这个变化
    2. 弱一致性:当一个节点的数据产生变化的时候,其他节点能够感知到部分变化或者没有感知
    3. 最终一致性:不关心中间变化过程,但是要求最后各个节点的数据是一样的
  5. 一致性的实现方式:
    1. Master/Slave:利用主节点控制从节点的一致性,例如主从复制
    2. paxos算法及其变种:在这种集群中不区分主从,例如Zookeeper
    3. WNR:W表示写入节点个数,R表示读取节点个数,N表示总节点个数,WNR要求W+R>N,例如Cassandra

 

已使用 Microsoft OneNote 2016 创建。

相关文章

# 前言 现有主流消息中间件都是生产者-消费者模型,主要角色...
错误的根源是:kafka版本过高所致,2.2+=的版本,已经不需要...
DWS层主要是存放大宽表数据,此业务中主要是针对Kafka topic...
不多BB讲原理,只教你怎么用,看了全网没有比我更详细的了,...
终于写完了,其实最开始学kafka的时候是今年2月份,那时候还...
使用GPKafka实现Kafka数据导入Greenplum数据库踩坑问题记录(...