未加星标

Redis 内置了一个 Kafka:Stream

字体大小 | |
[数据库(综合) 所属分类 数据库(综合) | 发布者 店小二04 | 时间 2018 | 作者 红领巾 ] 0人收藏点击收藏

流(Stream)是Redis从5.0.0版本新加入的一个数据结构,是一个类似于Kafka的消息系统。该结构相关的大部分命令使用字母 X 开头 如 XADD , XLEN , XRANGE 等。

在开始详细叙述之前,先说明一下:

本文内容主要是结合官网文章Introduction to Redis Streams 和个人理解整理而成。另外想吐槽下自己,游戏玩多了也不太好, Stream 总是不自觉的写成了 Steam 。

向Stream中添加数据

命令格式如

返回的 1541558444516-0 是消息id。 可以看到上面的命令ID参数传的是 * , 代表由系统生成的ID,当然,你可以显式的指定消息ID(基本不太常用),对于这个ID有几点需要注意:

ID必须是由 - 连接的两部分,前一部分默认情况下是当前Server当前的毫秒时间戳,后一部分是一个无符号64位长整型序列号;

同一个KEY下,后加入的ID一定要比已加入的ID大。

获取Stream长度

使用 XLEN , 如

从Stream中获取数据

有三种方式从Stream中获取数据

按照范围查询

包括 XRANGE 和 XREVRANGE 两个命令 ,分别是正序和反序, 以正序 XRANGE 为例:

从Stream这个key中返回ID范围是 start 到 end 的 [前count个] 数据。 如

- , + 分别表示最小和最大ID。

监听(XREAD)

XREAD 命令

执行完成后再执行:

发现Stream的长度没有变化,也就是说, XREAD 不会删除Stream里的数据。

上面的这个例子是一个非阻塞的方式监听。当使用 BLOCK 参数,并传递一个超时时间(0为永不超时),将启动一个阻塞方式的监听。 特殊的ID $ 表示从最新的ID开始监听。如:

启动一个监听客户端:

该命令阻塞等待, 此时另起一个客户端:

等待的客户端收到消息:

如果有多个客户端都在监听同一个流,这些客户端都可以得到流中的数据。

消费者组 (Consumer Group) 机制说明

涉及三个命令 分别是

XGROUP : 创建或者销毁一个 Consumer Group, 也可以从Consumer Group中删除一个 Consumer

XREADGROUP : 指定 Consumer Group 中的一个Consumer,消费一条消息

XACK : 在 XREADGROUP 调用时不指定 NOACK 时需要显式调用 XACK 命令 来确认该消息已被正确处理,可以删除。

消费者组的消费方式可以用下图表示

一个消息 msg 可通过 group1 和 group2 分发,并且 group1 中的 msg 会被 consumer1 或者 consumer2 消费,group2 中的 msg 会被 consumer3 或者 comsumer4 消费。

创建/消费/确认

使用 XGROUP 命令创建一个consumer group,如

这样就创建了一个名为foocg1的 consumer group, 其中 $ 表示该组将要消费当前时间开始的消息,然后我们向Stream中添加一些消息:

此时,使用foocg1下的c1消费者来消费一条消息

其中最后的ID字段 指定为 > , 表示只获取那些从来没有被分发的消息。

我们继续消费一条消息

然后,再消费历史上所有的数据

注意这里ID传的是 0-0 , 此时会发现消费的是第一条消息。也就是说,没有经过XACK的消息依旧会保留在队列中。

执行 XACK 操作:

此时再去消费历史数据

发现已经获取不到被 XACK 的消息了,当所有的历史数据全部被 XACK 后:

一个伪码表示的客户端

一个消费者组的实现的伪码表示可以写作:

XPENDING 和 XCLAIM

本文数据库(综合)相关术语:系统安全软件

分页:12
转载请注明
本文标题:Redis 内置了一个 Kafka:Stream
本站链接:https://www.codesec.net/view/611826.html


1.凡CodeSecTeam转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。
登录后可拥有收藏文章、关注作者等权限...
技术大类 技术大类 | 数据库(综合) | 评论(0) | 阅读(11)