kafka集群YGC问题排查

1. 介绍

最近kafka集群总是有偶发的YGC问题。今天上午花了点时间好好研究了下。

2. 现状

我们的kafka集群用的是kafka官方的推荐配置。server配置参考kafka官方文档第六章来配置。另外我们的硬件环境比Linkedin用的机器还好点,40核,60G内存。

3. YGC问题回顾

YGC出问题后可以查看下kafka服务器上的GC日志,在KAFKA_HOME/logs/kafkaServer-gc.log

可以看到GC日志:

spark streaming消费kafka消息的两种方式对比

1. 介绍

spark streaming去消费kafka消息相信是一种比较常见的情景。一般来说获取kafka消息的spark streaming流有以下两种:

基于Receiver的流(传统老方法)

Direct Stream(推荐的新方法)

本文主要参考官方文档Spark Streaming + Kafka Integration Guide (Kafka broker version 0.8.2.1 or higher)和Spark Streaming + Kafka Integration Guide (Kafka broker version 0.10.0 or......

关于设计前瞻性

公司应用kafka也有一段时间,或多或少都有些问题暴露出来。例如,一开始设计分区数的时候过于保守,导致后续client消费成瓶颈时没法通过增加一个消费者组的线程来增加消费速度了。

这个经验教会我一个道理:

使用一个新的平台也好,中间件也好。对于其性能和瓶颈应该有个前瞻性的规划,这个很重要。例如kafka在设计分区数的时候,应该仔细考虑当前消费者线程的消费能力。考虑未来数据规模增长后,消费者必然需要消费更多的数据从而保证不造成数据堆积。即消费者和生产者之间要保持平衡,不能让消费的比生产的慢,从而影响应用。这个前瞻性的规划应该是较为详细的,可控的。

数据规模的增长,消费者线......

Linkedin的Kafka Ecosystem

1. 介绍

本文主要是看了Kafka Ecosystem at LinkedIn这篇博文之后的一些总结。

2. kafka在linked现状

自2010开发使用以来,现在已经每天在1400个broker上处理1.4万亿条消息。kafka的持久性、低延迟等特性使得其在linkedin促成了一些新的使用案例。主要包括如下:

2.1 Replacing MySQL replication——Espresso

Espresso的详细说明见博文:Introducing Espresso - LinkedIn's hot new distributed document s......

选择合适的kafka分区数

1. 介绍

如何确定kafka的分区数相信是大家在使用kafka过程中比较关心的一个问题。早些时候,阿里的rocket mq在github上有和kafka比较(这里和老版本的kafka比较,估计是0.8的,现在是0.10.x)的说明。不过现在已经换掉了,而且也看到rocket mq支持集成kafka。可见kafka还是确实越来越受到市场认可。那篇老文章可以看网上这篇博文:RocketMQ与Kafka对比(18项差异)。

文中提到了“Kafka单机超过64个队列/分区,Load会发生明显的飙高现象,队列越多,load越高,发送消息响应时间变长”这个问题。针对这个问题,其实kafka的......