我们正在使用Kafka 0.10和Spark 2.1,我发现我们的制作人发布消息总是很慢。在向Spark执行者提供8个核心之后,我只能达到1k / s左右,而其他帖子说他们的汽车很容易达到数百万/秒。 我试着调整linger.ms和batch.size以找出答案。但是我发现linger.ms = 0看起来对我来说是最优的,而batch.size并没有太大的效果。我每次迭代发送160k事件。看起来我必须启用Kafka Producer Metrics以了解究竟发生了什么。但看起来在Spark Executor中启用它并不容易。
有人可以分享一些灯吗?
我的代码是这样的:
linewidths
答案 0 :(得分:0)
我终于找到了答案。 1. KafkaProducer有一个metrics()函数,可以获取生产者的指标。只需打印就足够了。
这样的一些代码应该有效:
public class MetricsProducerReporter implements Runnable {
private final Producer<String, StockPrice> producer;
private final Logger logger =
LoggerFactory.getLogger(MetricsProducerReporter.class);
//Used to Filter just the metrics we want
private final Set<String> metricsNameFilter = Sets.set(
"record-queue-time-avg", "record-send-rate", "records-per-request-avg",
"request-size-max", "network-io-rate", "record-queue-time-avg",
"incoming-byte-rate", "batch-size-avg", "response-rate", "requests-in-flight"
);
public MetricsProducerReporter(
final Producer<String, StockPrice> producer) {
this.producer = producer;
}
@Override
public void run() {
while (true) {
final Map<MetricName, ? extends Metric> metrics
= producer.metrics();
displayMetrics(metrics);
try {
Thread.sleep(3_000);
} catch (InterruptedException e) {
logger.warn("metrics interrupted");
Thread.interrupted();
break;
}
}
}