Kafka 官方文档学习笔记 -- introduction篇
Introduction
Kafka 是一个分布式流平台:
- 发布和订阅记录流,像消息队列/系统
- 容错持久地存储记录流
- 有记录流出现时处理
kafka概念:
- kafka是在多个服务器上以集群方式运行,并有多个数据中心
- 记录流存储在叫topics的类别里
- 每个记录包含了一个key,一个value和一个时间戳
4个APIs:
- Producer API : 允许程序发布1个数据流给一个或多个topics
- Consumer API : 允许程序订阅一个或多个topics并处理这些数据流
- Streams API : 允许程序扮演流处理器,从一个或多个topics中得到输入流并产生输出流给一个或多个topics
- Connector API : 建立和运行可重用的生产者和消费者来连接kafka topics到已有的程序或数据系统
Topics & Logs:
Topics是multi-subscriber, 可以有0/1/多个消费者订阅数据
每个topic是一个Partitioned log
partition 是有序的,不可改变的,被持续append的,结构化的commit log
kafka cluster持久地保存所有records(无论是否被消费过),根据一个可配置的保留时常
每个消费者保留的唯一metadata是offset,这个offset是被消费者控制的,它可随意调整消费数据的顺序
kafka 消费者可以随意来或走,而不会影响集群或其他消费者:可以用命令行来tail任何topic的内容而不用改变其他消费者正在消费的东西
分布:
每个partition分布在多个servers上,一个server上有多个partitions,以达到容错性
一个server扮演leader,其他扮演followers:
– leader 处理所有读写请求
– followers 被动复制leader
– 如果leader fail,从followers中选举leader
– 每个server扮演自己partition的leader 和 别人的follower
Geo-Replication:
主动/被动地镜像,来备份和恢复
生产者:
负责决定某个记录分配在这个topic的哪个partition – 负载均衡
消费者:
消费者分成组,每个发布到一个topic上的记录被放在每个组的一个消费者实例中,消费者实例可以在不同的进程或机器中
如果所有消费者都在一个组,则records会平均分配
如果所有消费者都不在一个组,则每个record分配在每个消费者上
通常一个logical subscriber对应一个消费者组。
消费的方式:
– partitions被平均分给每个consumer实例,所以在任何时刻每个实例都是一部分partitions的唯一消费者
– 如果一个实例新来,就从现有实例分配一点过来
– 如果一个实例掉线,就将它的任务拆分给其他实例
kafka只支持对一个partition内的records的总调度,而不管partition之间的(partition内部调度和按key的切分已经足够)
Kafka as a Storage System:
写入kafka的数据被存在disk中