如何在基于kafka流的应用程序中减少延迟

时间:2019-05-22 03:33:48

标签: apache-kafka apache-kafka-streams

我有一个带有3个kafka机器集群的真实环境,该集群正在接收大量数据。每个主题都有25个分区,复制因子设置为2。

我的应用程序(基于kafka流的应用程序)从该kafka群集获取数据的时间已超过一个月。现在,每个分区都有大量滞后;达到9000万。

我知道以下参数:

max.poll.records ; default —> 500
max.partition.fetch.bytes ; default —> 1048576
fetch.max.bytes ; default —> 52428800
fetch.min.bytes ; default —> 1

max.poll.interval.ms ; default —> 300000
request.timeout.ms; default —> 30000
session.timeout.ms ; default —> 10000

我有2个使用方节点(使用相同的组ID来使用kafka集群中的数据)。

但是,它并没有赶上滞后,而是保持不变。谁能建议如何改善滞后现象?

1 个答案:

答案 0 :(得分:0)

如果您的应用程序宕机了一个月,则某些记录已过期,因为在主题中的默认保留时间为7天,因此很可能丢失了一些消息。另外,根据您的Kafka Streams版本,默认的偏移量重置可以保留1天或7天。似乎您拥有auto.offset.reset: latest,因此它开始从每个分区的开头开始使用消息。如果您需要跳过所有消息并仅使用新消息,则应设置application.id并将num.stream.threads的值更改为新值。

如果您想并行使用消息并加快延迟减少,则可以将配置12设置为诸如num.stream.threads * numberOfConsumerNodes之类的值(numberOfPartitions应该小于或等于{ {1}},否则某些线程将处于空闲状态,或者需要增加使用者节点的数量。