前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >初识kafka

初识kafka

原创
作者头像
蚬爷
发布2020-08-25 17:46:20
3730
发布2020-08-25 17:46:20
举报
文章被收录于专栏:消息队列kafka消息队列kafka

《kafka权威指南》读书笔记

1. 发布与订阅消息系统

消息发布者对消息进行分类,接收者订阅它们,以接收特定类型的消息

发布与订阅系统一般会有一个broker,也就是发布消息的中心点

kafka的数据是按照一定顺序持久化保存的,可以按需读取

1) 消息和批次

kafka的数据单元被称为消息,消息可以看成是数据库里的一个数据行,或一条记录

消息是char数组,对kafka来说没有特别含义

消息可以有一个可选元数据,即键,键也是char数组

当消息写入不同分区时需要可控,可以用到键,如对键进行一致性hash。第3章将详细介绍键的用法。

批次就是一组消息。为了提高效率,消息被分批次写入kafka。这批消息属于同一个topic和分区。

消息分批写入需要权衡时间延迟和吞吐量:批次里的消息越多,单位时间内处理的消息就越多,单个消息的传输时间就越长。即批次里消息多,吞吐量大了,时间延迟也大了

2) 模式

3) 主题和分区

消息通过主题进行分类。主题类似于数据库的表,或者文件系统的文件夹。

一个主题可以被分为多个分区,每个分区就是一个提交日志。消息以追加的方式写入分区,然后以FIFO的顺序读取,

一个主题一般包含几个分区,因此无法在整个主题范围内保证消息的顺序,但可以保证消息在单个分区内的顺序。

kafka通过分区实现数据冗余和伸缩性,分区可以分布在不同的服务器上,即一个主题可以横跨多个服务器,以此来提供比单个服务器更强大的性能。

4) 生产者和消费者

生产者创建消息。一个消息会被发布到一个特定的topic上。生产者默认情况下把消息均衡地分布到topic的所有分区上,而并不关心特定消息会被写到哪个分区上。

不过在某些情况下,生产者需要将消息直接写到指定的分区,这通常是通过消息的键和分区器来实现的。分区器为键生成一个散列值,并将其映射到指定的分区上,这样可以保证同一个键的消息会被写到同一个分区上。生产者也可以使用自定义的分区器。

消费者读取消息。消费者订阅一个或多个主题,并按消息生成的顺序读取它们。

消费者通过检查消息的偏移量来区分已经读过的消息。

偏移量是另一种元数据,它是一个不断递增的整数值,在创建消息时,kafka会把它添加到消息里。消费者把每个分区最后读取的消息偏移量保存在zookeeper或kafka上。

在给定的分区里,每个消息的偏移量都是唯一的。

如果消费者关闭或重启,它的读取状态不会丢失。

消费者是消费者群组的一部分。即会有一个或多个消费者共同读取一个topic。群组保证每个分区只能被一个消费者使用。假如群组里有3个消费者,topic有4个分区,那么有两个消费者各自读取一个分区,另外一个消费者读取其他两个分区。如下图所示。

如果一个消费者失效,群组里的其他消费者可以接管失效消费者的工作。

5) broker和集群

一个独立的kafka服务器被称为broker

broker接收来自生产者的消息,为消息设置偏移量,并提交消息到磁盘保存。

broker为消费者提供服务,对读取分区的请求作出响应,返回已经提交到磁盘上的消息。

单个broker可以轻松处理数千个分区以及每秒百万级的消息量。

broker是集群的组成部分。每个集群都有一个broker充当集群控制器的角色。

在集群中,一个分区从属于一个broker,该broker被称为分区的首领。一个分区可以分配给多个broker,此时会发生分区复制。这种复制机制为分区提供了消息冗余。如果一个broker失效,其他broker可以接管领导权,不过,相关的消费者和生产者都要重新连接到新的首领。

保留消息是kafka的重要特性。默认的消息保留策略是这样的:要么保留一段时间,要么保留到消息达到一定大小的字节数。当消息数量达到这些上限时,旧消息就会过期并删除。

6) 多集群

kafka的消息复制机制只能在单个集群里进行,不能在多个集群之间进行。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 发布与订阅消息系统
    • 1) 消息和批次
      • 2) 模式
        • 3) 主题和分区
          • 4) 生产者和消费者
            • 5) broker和集群
              • 6) 多集群
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档