Kafka 基本概念
消息:类似于数据库的记录,由字节数组组成,消息里的数据没有特别的格式或含义。消息可以有一个可选的元数据(键),主要是当以一种可控的方式写入不同的分区时,需要用到。
批次:用于提高效率,将消息分批次写入kafka,批次也就是一组消息,但这些消息属于同一主题和分区。
模式和序列化: Avro(Avro 提供了紧凑的序列化格式,模式和消息体是分开的)
主题:消息通过主题进行分类,主题类似于数据库的表,或文件系统的文件夹。 主题可以被分为若干个分区,
分区:一个分区就是一个提交日志,消息以追加的方式写入分区,然后以先入先出的顺序读取。 由于一个主题包含多个分区,因此无法在整个主题范围内保证消息的顺序,但可以保证消息在单个分区内的顺序。 kafka 也是通过分区来实现数据冗余和伸缩性( 一个主题可以通过多个分区并分布在不同服务器上的方式,横跨多个服务器)。
生产者:创建消息的生产者。通常一个消息会分布到一个特定的主题上,生产者在默认情况下,把消息均衡地分布到主题的所有分区,而不关心特定消息会被写到哪个分区的。但是可以通过消息键和分区器来实现 —— 分区器为键生成一个散列值,并将其映射到指定的分区上,从而保证包含同一个键的消息会被写到同一个分区上(分区器可以自定义)。
消费者:读取消息。消费者订阅一个或多个主题,并按照消息生成的顺序读取它们。
偏移量:偏移量是一种元数据,它是一个不断递增的证书值,消费者通过检查消息的偏移量来区分已经读取过的消息。在给定的分区里,每个消息的偏移量都是唯一的。 消费者将内个分区最后读取的消息偏移量保存在 Zookeeper 或 Kafka 上,如果消费者关闭或重启,它的读取状态不会丢失。
消费群组: 消费者是消费群组的一部分,一个或多个消费者共同读取一个主题,群组保证每个分区只能被一个消费者使用。
broker: 一个独立的 Kafka 服务器成为 broker,broker 接收来自生产者的消息,为消息设置偏移量,并提交消息到磁盘保存。 broker 为消费者提供服务,对读取分区的请求做出响应,返回已经提交到磁盘上的消息。一个分区可以分配给多个broker,但只从属于一个 broker,这个 broker 是分区的首领。
消息保留: Kafka broker 默认的消息保留策略是——要么保留一段时间,要么消息达到一定大小的字节数。 当达到这些值得上限时,就消息就会过期并删除。
broker 、主题、分区、消费群组和消费者的关系::