08 集群参数配置(下)

Kafka Broker不需要太大的堆内存?

Kafka Broker不需要太大的堆内存?应该把内存留给页缓存使用?

kafka刷盘时宕机

kafka认为写入成功是指写入页缓存成功还是数据刷到磁盘成功算成功呢?还是上次刷盘宕机失败的问题,页缓存的数据如果刷盘失败,是不是就丢了?这个异常会不会响应给生产者让其重发呢?

写入到页缓存即认为成功。如果在flush之前机器就宕机了,的确这条数据在broker上就算丢失了。producer端表现如何取决于acks的设定。如果是acks=1而恰恰是leader broker在flush前宕机,那么的确有可能消息就丢失了,而且producer端不会重发——因为它认为是成功了。

MySQL两阶段提交

什么是页缓存

堆是Jvm使用的内存,缓存页,是操作系统使用的内存。比如写文件,一般就先写到操作系统使用的内存(缓存页),一定时间在批量写到磁盘。

页缓存属于磁盘缓存(Disk cache)的一种,主要是为了改善系统性能。重复访问磁盘上的磁盘块是常见的操作,把它们保存在内存中可以避免昂贵的磁盘IO操作。

既然叫页缓存,它是根据页(page)来组织的内存结构。每一页包含了很多磁盘上的块数据。Linux使用Radix树实现页缓存,主要是加速特定页的查找速度。另外一般使用LRU策略来淘汰过期页数据。总之它是一个完全由内核来管理的磁盘缓存,用户应用程序通常是无感知的。

如果要详细了解page cache,可以参见《Understanding the Linux Kernel》一书的第15章

你可能感兴趣的:(kafka核心技术与实战,kafka)