【发布时间】:2020-01-19 02:32:02
【问题描述】:
Kafka doc 说:
- Kafka 严重依赖文件系统来存储和缓存消息。
- 现代操作系统提供了预读和后写技术,以大块倍数的形式预取数据并将较小的逻辑写入分组到较大的物理写入中。
- 现代操作系统越来越积极地使用主内存进行磁盘缓存。现代操作系统很乐意将所有空闲内存转移到磁盘缓存中,而在回收内存时几乎没有性能损失。所有的磁盘读写都会经过这个统一的缓存
- ...与其保持尽可能多的内存并在空间不足时将其全部刷新到文件系统中,而是将其反转。所有数据都会立即写入文件系统上的持久日志,而不必刷新到磁盘。实际上这只是意味着它被转移到内核的页面缓存中。”
进一步this article 说:
(3) 当所有同步副本都将消息应用到它们的日志时,一条消息被“提交”,并且 (4) 只要至少一个同步副本处于活动状态,任何提交的消息都不会丢失。
所以即使我使用acks=all 配置生产者(这会导致生产者在所有代理提交消息后收到确认)并且生产者收到某些消息的确认,这是否意味着他们仍然有可能丢失消息,特别是如果所有代理都关闭并且操作系统从不将提交的消息缓存刷新到磁盘?
【问题讨论】:
标签: apache-kafka kafka-producer-api