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 卡夫卡消费者收到相同信息_Java_Apache Kafka_Apache Camel_Producer Consumer - Fatal编程技术网

Java 卡夫卡消费者收到相同信息

Java 卡夫卡消费者收到相同信息,java,apache-kafka,apache-camel,producer-consumer,Java,Apache Kafka,Apache Camel,Producer Consumer,我是卡夫卡新手,我有一个使用JavaApacheCamel库实现的卡夫卡消费者。我发现的问题是-消费者需要很长时间(>15分钟)来处理少量消息-这对于我们的用例来说是很好的 需要一些配置帮助,因为如果在15分钟内未处理相同的消息,则该消息将在15分钟后重新发送(我相信线程控制不会返回)。我想这可能是默认间隔,不确定这是哪个属性 那么,我在哪里可以修复配置 生产者级别,这样它就不会重新发送 或者生产者不参与重新发送,它是代理-卡夫卡服务器,所以消费者必须在处理之前确认消息 我的制作人具有以下属

我是卡夫卡新手,我有一个使用JavaApacheCamel库实现的卡夫卡消费者。我发现的问题是-消费者需要很长时间(>15分钟)来处理少量消息-这对于我们的用例来说是很好的

需要一些配置帮助,因为如果在15分钟内未处理相同的消息,则该消息将在15分钟后重新发送(我相信线程控制不会返回)。我想这可能是默认间隔,不确定这是哪个属性

那么,我在哪里可以修复配置

  • 生产者级别,这样它就不会重新发送
  • 或者生产者不参与重新发送,它是代理-卡夫卡服务器,所以消费者必须在处理之前确认消息
我的制作人具有以下属性:

<entry key="bootstrap.servers" value="${kafka.bootstrap.servers}" />
       <entry key="key.serializer" value="org.apache.kafka.common.serialization.StringSerializer" />
       <entry key="value.serializer" value="org.apache.kafka.common.serialization.StringSerializer" />

问题可能出在生产者端。您可能不需要检查制作人是否正在重新发送消息。您可以使用日志语句进行相同的操作。或者您可以对kafka producer使用一次语义。您只需要为相同的属性添加一个额外的属性


另一个可能是您的消费者没有提交补偿。你可能也需要在这方面进行一些头脑风暴

问题可能在制作人方面。您可能不需要检查制作人是否正在重新发送消息。您可以使用日志语句进行相同的操作。或者您可以对kafka producer使用一次语义。您只需要为相同的属性添加一个额外的属性


另一个可能是您的消费者没有提交补偿。你可能也需要在这方面进行一些头脑风暴

如果你试图避免同一信息的多次传递。这是错误的方法

在消息传递系统中,您必须处理可以多次传递的消息,因为在某些情况下需要它们来保证消息传递()

如果不牺牲系统的其他方面,就无法完全避免多次交付


如果您改为构建您的,则他们不关心消息是否由代理多次传递。这样,您就不需要限制您的代理。

您可以尝试避免同一消息的多次传递。这是错误的方法

在消息传递系统中,您必须处理可以多次传递的消息,因为在某些情况下需要它们来保证消息传递()

如果不牺牲系统的其他方面,就无法完全避免多次交付


如果您改为构建您的,则他们不关心消息是否由代理多次传递。这样,您就不需要限制您的经纪人。

消费者配置中的实际值是什么?目前我只看到像
${eventConsumerRequestTimeoutMs}
这样的占位符。您的消费者配置中的实际值是什么?目前我只看到像
${eventConsumerRequestTimeoutMs}
这样的占位符。
<endpoint id="apolloKafkaJanitorEventListenerURI"
            uri="kafka:${kafka.bootstrap.servers}?topic=${apollo.janitor.event.topic}&amp;
                                                        groupId=${apollo.janitor.event.group.id}&amp;
                                                        consumersCount=${apollo.janitor.event.consumer.count}&amp;
                                                        consumerRequestTimeoutMs=${eventConsumerRequestTimeoutMs}&amp;
                                                        sessionTimeoutMs=${eventConsumerSessionTimeoutMs}&amp;
                                                        maxPartitionFetchBytes=${eventConsumerMaxPartitionFetchBytes}" />
KafkaManualCommit manual =
       exchange.getIn().getHeader(KafkaConstants.MANUAL_COMMIT, KafkaManualCommit.class);
   manual.commitSync();