Kafka可以不存储数据当内存型消息队列使用吗?

林开心 发表于: 2023-01-17   最后更新时间: 2023-01-17 13:21:10   1,006 游览

目前需要比较大的吞吐量,不考虑数据的安全性;数据落盘会受IO限制,可以只当消息队列,不把数据存储到磁盘吗?

Kafka只做一个管道的作用,生产和消费都在内存里操作,数据不落盘;类似于NSQ这种内存数据库。

发表于 2023-01-17
  • 我还没太理解,需要你具体描述一下 想如何使用它。半兽人 1年前

不行的,kafka无法去掉落盘步骤,你可以考虑使用RabbitMQ,这种是可以存粹的使用内存。

但是,吞吐其实还是kafka更优,可参考:RabbitMQ和kafka从几个角度简单的对比

Kafka可以被用作内存型消息队列,但它的默认行为是将数据持久化到磁盘上,因为Kafka的设计目的是为了解决数据持久化和分布式消息传递的问题。不过,通过对Kafka的一些配置和设置,可以将其用作内存型消息队列。

下面是一些可能有用的配置和设置:

将Kafka的log.flush.interval.messages属性设置为1,这样每次写入消息时都会立即将消息刷入磁盘,从而确保消息能够在内存中得到快速处理。

将Kafka的log.retention.ms属性设置为较小的值,比如1分钟,以便更快地删除过期消息。

将Kafka的log.retention.bytes属性设置为较小的值,比如1MB,以便更快地删除过期消息。

使用非持久化的topic,这样Kafka就不会将消息持久化到磁盘上。

需要注意的是,将Kafka用作内存型消息队列可能会带来一些风险,例如消息丢失或重复等问题。因此,仅在对这些风险有足够的了解并且确信这是您需要的行为时,才应该将Kafka用作内存型消息队列。

半兽人 -> 17 1年前

1分钟后,消息不管消不消费,不都丢了。

林开心 -> 17 1年前

Kafka好像没有办法创建非持久化的topic吧?
若是把log.flush.interval.messages改的很低,还是会写磁盘,我是想不操作磁盘,最大的提升吞吐。

你的答案

查看kafka相关的其他问题或提一个您自己的问题