Kafka介绍
Kafka介绍:
1、Kafka以集群形式运行在一到多台服务器上,每个Kafka工作进程称为broker
2、Kafka集群对记录的流进行分类存储,这种分类称为主题(topic)
3、每条记录由键、值、时间戳组成
Kafka有三种关键能力:
1、发布和订阅记录流。在这个方面其等于一个消息队列或企业级消息中间件,也是我们最熟悉的用法。
2、以容错的方式存储记录流。这是Kafka和很多仅基于内存的消息队列的重要区别。
3、对流中的记录进行处理(Kafka Streams)。
Kafka有四类核心API:
(后两类API作为Kafka的新功能,在大数据的生态体系下有更加胜任的组件。)
1、Producer API允许应用程序将记录流发布到一个或多个topic中
2、Consumer API允许应用程序从一个或多个topic中订阅记录流
3、Streams API允许应用程序作为流处理器,从一个或多个topic中消费输入流,并向一个或多个topic写出输出流,在输入流和输出流中做转换
4、Connector API允许创建和运行可重用的生产者或消费者,其将topic连接到现有应用程序或数据系统,例如一个到关系型数据库的connector可将表的变动捕捉到topic中
Topic和Log:
Topic是记录被发布到的目标的名称。Kafka中的topic通常都有多个订阅者,即允许0,1或多个消费者订阅其中的数据。
每个分区(partition)是有序、不可变的记录序列,被持续追加写入,这是一种结构化的提交日志。
分区中的每条记录都被分配一个称为offset的序列号,该序号可在分区内唯一识别每条记录。
Kafka集群在一段周期内保存所有已发布的记录,不论其是否被消费。例如,如果保留策略设置为2天,
则在某条记录发布后的2天内其可供消费,过后其将被丢弃以释放空间。
Kafka的性能对数据量来说是常数,因此存储更久的数据也是可以的。
每个消费者层面保留的唯一元数据是log消费的偏移量或点位。该偏移量由消费者控制:
通常消费者在读取记录时会线性地增加其偏移量,但由于消费者可以控制该偏移量,实际上可以按任何顺序消费。
例如消费者可以将偏移量重制为一个旧值以消费过去的数据,
或跳过之前的记录从最新的数据开始消费。Kafka消费者是非常轻量级的,它们的来去都不会对集群或其他消费者造成较大的影响。
log的分区有几个目的:首先,可以使log扩展到超过一个服务器可容纳的大小,每个分区仍需要能被服务器容纳,但一个topic可以有多个分区因此可以达到任意数据量;其次,分区是并行的单位。
分布式:
log的分区分布在Kafka集群的各个服务器上,每台服务器针对一些分区处理数据和请求。为了容错,每个分区都会被复制成可配置的副本数。
每个分区都有一台服务器作为其“leader”,还有0或多台服务器作为“followers”。leader处理该分区的所有读写请求,followers只是被动复制leader的数据。
如果leader挂掉,followers中的一个会自动成为新的leader。每台服务器都作为其上部分分区的leader和其他分区的follower,因此集群上的负载可以很好地均衡。
生产者(producer):
生产者将数据发布到它们指定的topics。生产者负责选择将记录分配到topic中的哪个分区。
可以以round-robin方式分配以简单地负载均衡,或可以按可以按某个分区函数(基于记录的键来计算)来分配。
消费者(consumer):
消费者拥有一个消费者组(consumer group)名,topic的每条记录会被传输给其消费者组中的唯一一个消费者。
消费者实例可以是单独的线程,也可以位于单独的机器上。
如果所有的消费者实例有相同的消费者组名,记录会在这些消费者实例间有效地负载均衡。
如果所有的消费者实例都属于不同的消费者组,则每条记录会被广播到所有的消费者线程上。
Kafka给出如下高层次保证:
1、生产者发送到某个特定topic partition的消息将以其发送顺序被追加(到log)。
即,如果记录M1和M2由同样的生产者发送,且M1先发送,则M1会比M2有更小的offset,也较早出现在log中。
2、消费者实例按存储在log中的顺序看到记录。
3、对副本因子为N的topic,可容忍最多N-1个服务器失效,不会丢失任何已提交到log的记录。
浙公网安备 33010602011771号