Open kenttanl opened 3 years ago
附加1: client.id 可能导致 Broker 的内存溢出问题(version_0.11):
Consumer 连接服务器,如果没有指定 client.id,那么将由客户端自动生成一个 clientId(由 consumer- 为前缀,累加数字为后缀)。当 consumer 连接 Broker 后,会生成一个用于 JMX 监控的对象,并以 clientId 为键,JMX对象为值的形式保存在一个 Map 容器中,并且值得注意的是:Broker 不会在 Consumer 关闭时将其对应的数据从 Map 容器中移除,所以最终可能导致的一个实际情形是:当我们不停的通过创建大量的 consumer 去监控集群上对应 consumer 的偏移量等指标时,Broker 的内存使用率逐渐的在增加,直到 OOM。最后通过 head dump 文件发现,使用 8G 的内存,该 Map 却占用了 7G 的内存。解决方法是:通过指定或复用 clientId,以减少 Broker 的缓存量,最终问题得以解决。
min.insync.replicas=2
;auto.offset.reset=earliest | latest
时,如果分区上不存在指定组的 offset,那么将自动重置 offset 为最早或者最新的,而此时如果数据是因为时间过期或者空间占用大小超过阈值而被删除,那么就会出现无感知的数据丢失,即数据在消费前被删除,但是消费者却并不知道其被删除,从而没有进行手动恢复数据;
Consumer poll and rebalance
通过 Wireshark 抓包以及 Debug 源码,对 Consumer poll 及 rebalance 相关操作得出以下结论: