kafka初认识(一)

首先贴出官网地址:https://kafka.apache.org/

一、 简介

Kafka 是 linkedin 使用 Scala 编写具有高水平扩展和高吞吐量的分布式消息系统。Kafka 对消息保存时根据 Topic 进行归类,发送消息者成为 Producer ,消息接受者成为 Consumer ,此外 kafka 集群有多个 kafka 实例组成,每个实例(server)称为 broker。无论是 Kafka集群,还是 producer 和 consumer 都依赖于 zookeeper 来保证系统可用性,为集群保存一些 meta 信息。(但新版本除外,不用依赖zookeeper)

二、常用MQ性能对比

kafka初认识(一)

 三、kafa主要功能

Apache Kafka® 是 一个分布式流处理平台

流处理平台特性

可以让你发布和订阅流式的记录。这一方面与消息队列或者企业消息系统类似。

可以储存流式的记录,并且有较好的容错性。

可以在流式记录产生时就进行处理。

Kafka 适合什么样的场景

构造实时流数据管道,它可以在系统或应用之间可靠地获取数据。 (相当于消息队列)

构建实时流式应用程序,对这些流数据进行转换或者影响。

四、kafa相关概念

AMQP (Advanced Message Queuing Protocol) ,是一个提供统一消息服务的标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件而设计。

kafka初认识(一)

一些基本的概念:

AMQP服务器端(broker):用来接收生产者发送的消息并将这些消息路由给服务器中的队列

消费者(Consumer):从消息队列中请求消息的客户端应用程序

生产者(Producer):向 broker 发布消息的客户端应用程序

Topics 和 Logs

Topic 就是数据主题,是数据记录发布的地方,可以用来区分业务系统。Kafka 中的 Topics 总是多订阅者模式,一个 topic 可以拥有一个或者多个消费者来订阅它的数据。对于每一个topic,Kafka集群都会维持一个分区日志,如图所示:

kafka初认识(一)

Partition

kafka初认识(一)

每一个分区都是一个顺序的、不可变的消息队列, 并且可以持续的添加。分区中的消息都被分了一个序列号,称之为偏移量(offset),在每个分区中此偏移量都是唯一的。Kafka集群保持所有的消息,直到它们过期, 无论消息是否被消费了。 实际上消费者所持有的仅有的元数据就是这个偏移量,也就是消费者在这个log中的位置。 这个偏移量由消费者控制:正常情况当消费者消费消息的时候,偏移量也线性的的增加。但是实际偏移量由消费者控制,消费者可以将偏移量重置为更老的一个偏移量,重新读取消息。 可以看到这种设计对消费者来说操作自如, 一个消费者的操作不会影响其它消费者对此log的处理。kafka 并没有提供其他额外的索引机制来存储 offset,因为在 kafka 中几乎不允许对消息进行“随机读写”。再说说分区。Kafka中采用分区的设计有几个目的。一是可以处理更多的消息,不受单台服务器的限制。Topic拥有多个分区意味着它可以不受限的处理更多的数据。第二,分区可以作为并行处理的单元

Distribution

Log 的分区被分布到集群中的多个服务器上,每个服务器处理它分到的分区, 根据配置每个分区还可以复制到其它服务器作为备份容错。每个分区有一个 leader,零或多个 follower。Leader 处理此分区的所有的读写请求,而 follower 被动的复制数据。如果 leader 宕机,其它的一个 follower 会被推举为新的 leader。 一台服务器可能同时是一个分区的 leader,另一个分区的 follower。 这样可以平衡负载,避免所有的请求都只让一台或者某几台服务器处理。

Producers

生产者往某个Topic上发布消息,生产者也负责选择发布到Topic上的哪一个分区。最简单的方式从分区列表中轮流选择,也可以根据某种算法依照权重选择分区。开发者负责如何选择分区的算法。

Consumers

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzjxsw.html