Kafka简介
一、概述
- Kafka是LinkedIn(领英)开发后来贡献给了Apache的一套纯粹的发布订阅模式的、分布式的实时流消息队列
- Kafka的特征:
- 发布订阅消息流
- 允许存储消息流并且提供了容错机制
- 实时处理消息流
- Kafka的应用场景:
- Kafka会接收到的数据存储到本地磁盘上,而且单节点的Kafka的吞吐量是60M/s~100M/s,Kafka底层采用"零拷贝"机制
- Kafka的开发语言是Scala,基于Scala的特性,Kafka具有很好的安全性和扩展性 - 在Kafka中可以动态添加节点
- Kafka默认不会清理日志,如果需要自动清理,那么需要在server.properties中将log.cleaner.enable的值设置为true
- offset机制是为了防止数据被重复处理;索引机制是为了快速定位数据
二、基本概念
- broker:经纪人
- topic:话题/主题
- partition:分区
- replication:副本
- producer:生产者。向Kafka放入数据
- consumer:消费者
- leader和follower:
- controller:控制器
- Consumer group - 消费者组:
三、基本命令
命令 | 解释 |
sh kafka-topics.sh --create --zookeeper hadoop01:2181 --replication-factor 1 --partitions 1 --topic news | |
sh kafka-topics.sh --list --zookeeper hadoop01:2181 | 查看现在已经有的topic |
sh kafka-topics.sh --delete --zookeeper hadoop01:2181 --topic video | |
sh kafka-console-producer.sh --broker-list hadoop01:9092 --topic log | 启动生产者 |
sh kafka-console-consumer.sh --zookeeper hadoop01:2181 --topic log | 启动消费者 |
四、消息流
- producer产生数据之后,将数据发送给leader副本
- 当leader副本收到数据之后,会将数据写到本地的日志中,然后等待
- follower副本定时的给leader副本发送信号,询问是否有新的信息需要同步
- 当leader副本收到信号之后,会将新的数据发送给follower副本要求同步
- follower副本在收到信息之后,会将信息记录到本地日志中,如果记录成功,则会给leader副本返回一个ack
- 当leader副本收到ACK之后,会记录这个副本所对应的brokerid(ISR),同时给producer返回一个ack
- ISR的作用:当leader副本所在的节点宕机的时候,可以考虑从ISR队列中选择一个副本成为新的leader
五、消息系统语义
- 至少一次
- 至多一次
- 精确一次
六、CAP理论
- CAP:
- 经过数学证明,CAP三大理论无法同时满足,最多只能满足其中的2个
- 在分布式中,优先考虑满足P,所以导致分布式集群基本都是CP或者AP系统
- 一致性的分类:
- 一致性的实现方式:
已使用 Microsoft OneNote 2016 创建。