数据是系统的燃料,系统的效率高低很大程度取决于数据流转是否及时:html
Kafka 是一款为数据整合而生的基于发布与订阅的消息系统Messaging System
,方便用户在多系统间实现松散耦合的异步数据传输。数据库
Kafka 为消息提供顺序持久化保存,可按需读取。并经过集群部署与冗余副本保障数据安全并提供性能伸缩能力。数组
消息message
:最基本的数据单元,由字节数组组成。消息能够有一个可选的键key
,键也是一个字节数组。安全
主题topic
:消息经过主题进行分类。主题就比如数据库的表,或者文件系统里的文件夹。服务器
分区partition
:一个提交日志,主题能够被分为若干个分区。消息以追加的方式写入分区尾部,而后以先入先出的顺序读取。异步
偏移offset
:一个不断递增的整数值,在建立消息时指定。同个分区中每一个消息的偏移量都是惟一的。工具
生产者producer
:建立消息并将其发布到一个特定的主题上。性能
消费者consumer
:订阅主题并按照消息生成的顺序读取消息。日志
Kafka 经过分区来实现 数据冗余 和 可伸缩性:分区能够分布在不一样的服务器上,一个主题能够横跨多个服务器,以此来提供比单个服务器更强大的性能。code
要注意,因为一个主题通常包含几个分区,所以没法在整个主题范围内保证消息的顺序。生产者在默认状况下,会把消息均衡地分布到主题的全部分区上,而并不关心特定消息会被写到哪一个分区。
为了保证消息顺序可控,能够为同类消息指定相同的键,而后生产者会根据键的 hashmod 结果选取分区,从而保证具备相同键的消息总会被写到相同的分区上。
每一个分区只能被分配给一个消费者,而后消费者会按照消息生成的顺序读取它们。
过程当中,消费者会记录已读消息的偏移量,避免重复消费同一条消息。
消息系统中常见的通讯模型有两种:
message queue
:点对点point to point
的排他通讯,每条消息只会被消费一次。pub/sub
:相似广播通讯,每条消息可能会被消费屡次。
为了同时支持这两种模式,Kafka 在消费者端引入了 消费者组群counsumer group
这一逻辑概念:
一个独立的 Kafka 服务器被称为 broker,其主要职责有两个:
为保证可用性,broker 以集群的方式部署。每一个集群会自动选举出一个 controller 负责管理工做,包括将分区分配给 broker 和监控 broker。
一个分区从属于一个 broker,该 broker 被称为分区的 leader。
若是分区容许多副本replica
,这些副本会分布在多个 broker 上,此时会发生分区复制replication
。
这种复制机制为分区提供了消息冗余,当 leader 失效时分区会被其余 broker 接管,相关的消费者和生产者都会重连新的 leader。