不用优化,这是java的特性,kafka也利用了这一点。
举个例子:一台物理机,有32G的内存,一个kafka,最大占4G。还剩28G,空闲时,kafka会利用物理机剩余的28G当成消息的缓存,消息占用这些剩余的内存,但当有其他的程序启动需要内存时,kafka会马上释放这些内存给其他的应用。
文件系统并依赖pagecache(页缓存)将优于维护一个内存缓存(或者其他结构) - 我们通过自动访问所有可用的内存使得可用的内存至少提高一倍。
摘自:kafka持久化
会不会接受,取决与min.insync.replicas
当producer设置acks为"all"(或"-1")时。min.insync.replicas指定必须应答成功写入的replicas最小数。如果不能满足最小值,那么producer抛出一个异常(NotEnoughReplicas或NotEnoughReplicasAfterAppend)。
当一起使用时,min.insync.replicas和acks提供最大的耐用性保证。一个典型的场景是创建一个复制因子3的topic,设置min.insync.replicas为2,并且ack是“all”。如果多数副本没有接到写入时,将会抛出一个异常。
好的,我先看看,我的副本刚开始是3个,宕机一台,还有两台; 这种情况 patition1 是不是就不应该再接受到消息了呢? 这里也不太明白 ~