前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >kafka 消息队列的原理

kafka 消息队列的原理

原创
作者头像
erili
修改2020-08-25 08:22:24
1.1K0
修改2020-08-25 08:22:24
举报
文章被收录于专栏:技术论坛技术论坛

kafka 是一个分布式消息队列

群集部署, 可以部署在多个数据中心

topic: key, value, timestamp

每个topic:有分区日志

每个分区日志记录是顺序的, 不可变的串行offset, 追加到结构化的commit log, 每个offset 在分区中唯一标识一条记录

kafka 持久化每一条已发布的记录, 不管是否已被消费. 可以配置持久化保存的时长. 假如配置了2天, 那两天后记录会被删除掉以节省空间

消费者保存消费的offset, 记录消费的为止, 可以向前推进读取, 也可以向后读取

用户可以用“tail“命令查看消息

日志分区分布在多台服务器上

Geo-Replication

MirrorMaker 可以把消息复制到多个数据中心或者云区域

生产者负责把消息推送到指定的分区(patition), 和消息

消费者可以分组

同分组的消费者会一load balance 的方式推送到其中一台消费者实例

不同分组的消费者会一广播的方式推送到各个消费者实例

note: 同分组应该是只有一个实例消费,所以要消费多次需要在不同的分组.

kafa 只保证同一个topic在一个分区内的顺序性, 并不保证多个分区之间的顺序性

如果想全局唯一, 可以配置一个topic只有一个分区, 但是这样意味着一个消费者组里只有一个消费者

kafka 保证能做到的

三点:

- 生产者对一个topic 一个 分区推送的消息保证顺序性

- 消费者看到消息的顺序与日志的顺序一致

- 假如有N台消息服务器 , kafka能容忍宕机了N-1台服务器并且不会丢失数据

kafka 是一个消息系统, 存储系统, 流处理系统

作为消息系统, kafka的特点与优势

消息队列有两种:

  1. 队列(queue)

一群消费者消费同一个队列, 每个消息被其中一个消费者消费.

优点: 多个消费者可以快速消费消息

缺点: 不支持多个消费者消费统一个消息, 消息被消费完以后就会小时

  1. 发布与订阅(publish-subscribe)

生产者广播消息给每一个消费者.

优点: 消息可以同时被多个消费者消费

缺点:消息处理慢, 一次只能消费一个消息

kafka 的消费者组(consumer group)泛化了这两种消息队列, 一个消费者组就是queue, 订阅是跨消费者组的

注意, 消费者组里的消费者实例不能多于分区

作为存储系统, kafka的特点与优势

- 数据会写在硬盘上并且复制到其它机器上备份. kafka允许生产者等收到复制回应才认为是消息推送成功

- 性能高. 不管服务器上有数据上50K,还是50T, 写入性能是一样的

kafka 存储系统设计原理

作为流处理系统, kafka的特点与优势

可以使用生产者与消费者api来处理, 但是更复杂的流可以使用kafka的stream api 处理.

stream api 解决几个难点: 处理乱序数据, 代码变更后重新处理, 处理有状态的计算等等

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • kafka 是一个分布式消息队列
    • Geo-Replication
    • kafka 保证能做到的
    • 作为消息系统, kafka的特点与优势
    • 作为存储系统, kafka的特点与优势
    • 作为流处理系统, kafka的特点与优势
    相关产品与服务
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档