什么是Kafka?
分布式、流数据平台,类似消息队列
流数据平台可以:1、发布和订阅流数据
2、容错的存储流数据
3、处理流数据
Kafka通常用来: 1、作为实时流数据通道,应用或系统间传输数据(实时性,低延迟,可
用于暂存重要数据)
2、做实时流数据处理、响应
Kafka通常用来做告诉输出的缓存,这是由于它变态的性能。另外它可以暂存重要数据,因为从Kafka消费(读取)数据后数据是不会立即删除的,而且这些数据可以设置备份。
Kafka的API
Producer:用于向Kafka生产数据,单个producer可以对应多topics
Consumer:用于从Kafka消费数据,单个consumer可以对应多topics
Streams:用于做简单的流数据处理,可生产可消费,多topics
Connector:用于创建运行多个producer和consumer
多语言:Java等主流语言都有对应的API
Topic:records的分类,所有record都是发布到某一个topic的
Record:{key,value,timestamp}
可以把Kafka理解为不可修改的queue(of records),保存一段历史时间的数据eg.两天
每个consumer元数据只保存一个offset,可由consumer自由控制,也就是说offset不一定是简单递增的,如果有这个需要,可以返回读取两天前的数据,或者直接读取最新的数据
Partition 一个topic被分为多个partition,可存在不同机器上,record被分配到不同partition(可根据key写分区函数),减少单个节点负载
Replica 每个partition有多个复制,可存在不同机器上,由一个leader和零或多个follower组成,只有leader可读可写,follower只写,leader挂掉后从follower中选出新的leader
保证:每个partition内按输入顺序存放
其他概念:
Consumer group:同一个topic的不同partition平均动态分配到一个consumer group的所有consumer上,同一个topic可以broadcast到每一个consumer group(subscriber),每一个topic被分解传输到group里的不同consumer,如果同一个group中的消费者数量多于本topic的partition数量,多余的消费者将接收不到消息
Broker:Kafka集群中的机器/服务被成为broker, 是一个物理概念。
ISR