Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从同一JVM运行kafka使用者和生产者时,生产者速度变慢_Java_Apache Kafka_Spring Kafka - Fatal编程技术网

Java 从同一JVM运行kafka使用者和生产者时,生产者速度变慢

Java 从同一JVM运行kafka使用者和生产者时,生产者速度变慢,java,apache-kafka,spring-kafka,Java,Apache Kafka,Spring Kafka,我正在使用kafka 0.8和spring集成kafka 1.2.0.0版本 我有两个主题,分别是小学和中学。我需要从主要主题开始消费,经过一些处理后,需要生成第二个主题,以便稍后进行下一组处理 虽然从主要主题的消费工作正常,但从第二主题的生产在几分钟后就开始失败。问题始于我设置的500毫秒后向卡夫卡发送请求超时。以线程池耗尽结束 如果我试图将事件生成到另一个卡夫卡集群的次要主题,那么它可以正常工作 我有4个消费者运行这两个主题,每个主题有200个分区 我对卡夫卡不太熟悉,请原谅我缺乏知识。 请

我正在使用kafka 0.8和spring集成kafka 1.2.0.0版本

我有两个主题,分别是小学和中学。我需要从主要主题开始消费,经过一些处理后,需要生成第二个主题,以便稍后进行下一组处理

虽然从主要主题的消费工作正常,但从第二主题的生产在几分钟后就开始失败。问题始于我设置的500毫秒后向卡夫卡发送请求超时。以线程池耗尽结束

如果我试图将事件生成到另一个卡夫卡集群的次要主题,那么它可以正常工作

我有4个消费者运行这两个主题,每个主题有200个分区

我对卡夫卡不太熟悉,请原谅我缺乏知识。
请对我应该提供的任何缺失信息进行评论。

根据所提供的信息,有点难以了解,但我怀疑问题在于,您可以从第一个主题中使用,然后计算结果,速度比您从第二个主题中产生的速度快。这可能有很多原因。例如,对次要主题的写入可能在分区之间分布得不好。类似地,由于各种原因,生产到不同集群可能会成功,包括更快的机器、更多的机器、更好的网络等

基本问题并不是卡夫卡特有的:如果您从一个源消费数据并将数据发送到第二个接收器,您通常无法假设第二个接收器总是比第一个源快。每当第二个水槽变慢时,即使是一点点,你最终也会遇到这样的问题。例如,假设您可以每秒从主接收器读取100个事件,但辅助接收器每秒只能消耗99个事件。这意味着每秒钟内存中就会有一个事件等待发送到接收器。如果您不采取任何措施来降低从主源读取数据的速度,您将耗尽RAM、线程或其他资源

一般的解决方案是某种节流。例如,您可以使用以500个许可证开头的
信号量
:这意味着您无法从主源读取超过500个尚未成功发送到接收器的项目。在从主要来源读取一个项目之前,你应该减少
信号量
,这样如果你已经“领先”次要来源500个项目,你的阅读器就会阻止。每次您成功地将一个项目发送到第二个主题时,您都会释放一个允许另一个读取继续进行的许可


我要提醒大家不要使用第二个Kafka集群或其他可以工作但不能真正解决核心问题的修复。例如,如果现在生产到另一个集群可以工作,那么当该集群由于节点丢失、大的重新平衡等原因而减速时,它就不会工作。这只是暂时隐藏了问题。

在尝试了所有可能的配置后,终于发现了问题

错误地忘记删除之前为消费者集成添加的以下依赖项

<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-clients</artifactId>
<version>0.9.0.0</version>

org.apache.kafka
卡夫卡客户
0.9.0.0

它在生成正在添加处于等待状态的线程时导致了一些冲突。如果有人能就它可能增加的冲突提供指导,那将是一个很好的学习


谢谢。

如果您是Apache Kafka新手,最好升级到最新版本-0.10.1。在Spring抽象级别上也有很多很好的变化。我也会尝试升级,但问题是缺少一些配置。感谢您的响应。我同意不应该假设第二个接收器总是比第一个源快。这里有几点需要注意从一级消耗并进行一些处理后,我在应用过滤器后生产到二级。在当前场景中,只有5%的从主服务器消耗的消息被生成到辅助服务器。即使在流量非常低的情况下,它也会失败“尝试使用第二个群集”在速度较慢且数量较少的计算机上成功运行。我甚至觉得与卡夫卡没有任何联系可能是个问题。所以在没有帮助的情况下尝试增加属性num.network.threads。我仍然觉得缺少一点配置。另外,第二个主题和主主题具有相同的分区数,并且分区使用相同的键。有趣。是的,听起来好像和我的诊断不符。恐怕我没有其他好主意。很抱歉