目前需要比较大的吞吐量,不考虑数据的安全性;数据落盘会受IO限制,可以只当消息队列,不把数据存储到磁盘吗? Kafka只做一个管道的作用,生产和消费都在内存里操作,数据不落盘;类似于NSQ这种内存数据库。
不行的,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用作内存型消息队列。
1分钟后,消息不管消不消费,不都丢了。
Kafka好像没有办法创建非持久化的topic吧?
若是把log.flush.interval.messages改的很低,还是会写磁盘,我是想不操作磁盘,最大的提升吞吐。
你的答案