当前位置: 首页 > 知识库问答 >
问题:

Redis Streams vs Kafka Streams/NAT

宗政金鹏
2023-03-14

Redis团队为Redis 5.0引入了新的Streams数据类型。由于Streams从第一视角看起来像Kafka主题,因此似乎很难找到使用它的真实世界示例。

在streams intro中,我们与Kafka streams进行了比较:

  1. 运行时消费者组处理。例如,如果三个消费者中的一个永久失败,Redis将继续服务第一个和第二个,因为现在我们只有两个逻辑分区(消费者)。
  2. Redis流更快。他们从内存中存储和操作,所以这个是这样的。

我们有一些项目与Kafka,RabbitMq和NATS。现在我们深入研究Redis流,试图将其用作“前Kafka缓存”,在某些情况下用作Kafka/NATS的替代方案。现在最关键的一点是复制:

  1. 使用AOF复制将所有数据存储在内存中。
  2. 默认情况下,异步复制不能保证复制XADD命令或消费者组状态更改:故障转移后,根据跟随者从主服务器接收数据的能力,可能会丢失一些内容。这个看起来像是在高负载下扼杀任何尝试流的兴趣。
  3. 由Sentinel或Redis Cluster操作的Redis故障转移过程仅执行最大努力检查以故障转移到更新最多的跟随者,并且在某些特定故障下可能会促进缺少某些数据的跟随者。

和上限策略。Redis Streams真正的“上限资源”是内存,所以你想存储多少项或者你使用哪种上限策略并不重要。因此,每次消费者失败时,您将获得内存消耗峰值或消息丢失上限。

我们使用Kafka作为RTB投标人前端,每秒处理约1,100,000条消息,有效载荷约为120字节。使用Redis,我们在写入时有大约170 mb/秒的内存消耗,使用512 gb内存服务器,我们有大约50分钟的数据写入“储备”。因此,如果处理系统在此期间脱机,我们将崩溃。

你们能告诉我更多关于Redis Streams在现实世界中的使用情况吗?也许你们自己也在尝试使用它?或者Redis Streams是否可以用于数据量不大的情况?

共有1个答案

边意
2023-03-14

好久不见。这感觉像是属于redis db邮件列表的讨论,但用例听起来很吸引人。

请注意,Redis Streams无意成为Kafka的替代品——尽管有相似之处,但它们提供了不同的属性和功能。关于复制的异步性质,您当然是正确的。至于缩放可用RAM的数量,您应该考虑使用集群并跨基于周期的密钥名称划分流。

 类似资料:
  • 问题内容: 最近,我在* NIX操作系统中使用了很多汇编语言。我想知道Windows域。 Linux中的调用约定: 而已。这就是我们应该如何在Linux中进行系统调用。 linux中所有系统调用的参考: 关于哪个$ SYS_Call_NUM和哪个参数,我们可以使用此引用:http ://docs.cs.up.ac.za/programming/asm/derick_tut/syscalls.htm

  • 问题内容: 在我的NativeScript项目中,我想包含RecyclerViewAndroid支持库中的内容。我将依赖项包括在: 从git issue#2295和其他相关问题中,我读到tns-platform-declarations可以提供本机android / ios库的定义文件的内容。所以我安装了它们并遵循了tns平台声明文档 我想编译以下示例代码段: 声明var android以上类似内

  • 问题内容: 我在网上找到了许多参考文献(包括一些关于stackoverflow的参考文献),这些参考文献都用于C 库的JNA,但是我在JNA文档中找不到任何内容表明这是可能的。特别是似乎没有任何包装C 类的方法。 我需要本机访问权限才能使用RTAudio,但是RTAudio的所有功能都是RTAudio类的成员函数。因此,仅需确认,JNA是否行不通? 问题答案: 这个问题的意思是询问如何使用JNA调

  • 问题内容: 使用Java本机接口时,我遇到了一个导致此错误的问题。我相信这是因为我使用MinGW编译了.dll,而我的系统是64位的,因此我的Java运行于64位,而MinGW编译为32位的.dll。无论如何,有没有强制我的Java在32位上运行? 问题答案: 您将必须安装32位JVM,然后才能运行代码。 如果要分发应用程序,则将要构建DLL的32位和64位版本。然后,使用以下技术来加载正确的DL

  • 问题内容: 美好的一天,我为Cordova制作了本机背景mod,我需要从js到Java获取数据。我使用以下代码将数据保存在带有插件cordova-plugin- nativestorage的 js中: 但是我的问题是:我不知道如何在没有Cordova活动的情况下使用Java在后台服务中获取此数据(“值”)。 背景服务Java: 问题答案: 我进行了更改,因此您应该方便地访问所保存的值。 请首先重新

  • 问题内容: 我需要生成加密强度高的随机数和字节数组。为此,我使用Java的类。但是我不确定根据加密强度选择哪种PRNG算法。 以下哪个实例产生了更不可预测的数字?还是相等? 此外,我们能够使用“ SUN”提供程序生成这些实例(例如)。这有什么不同吗? 提前致谢。 问题答案: TL; DR:不确定时使用,让系统找出来。可能用于长期密钥生成。 不要期望随机数生成器会在运行时应用程序中生成特定的输出序列

  • 问题内容: 我试图在Java中实现UDP-Holepunching的简单草图以测试其概念,并稍后在我的C / C ++应用程序中使用它。 从Wikipedia来说,我的理解是:A和B是未定义网络结构背后的客户端,C是著名的公共可访问服务器。 A将数据包发送到服务器C,服务器保存其IP地址和端口。C将获得A的NAT的公共IP地址。这样做,A前面的NAT将创建一条路由,该路由会将此端口上的所有数据包传

  • 问题内容: 我想知道Python中是否有类似于PHP natsort函数的东西? 给出: 但我想得到: 更新 基于此链接的解决方案 问题答案: 从我对自然排序算法的回答: 例: 要支持Unicode字符串,应使用而不是。请参阅@phihag的注释中的示例。相关:如何显示数值属性。 在某些语言环境中,Python 2上的字节串也可能会失败(返回值不被接受),例如,在Windows的cp1252语言环