Java 卡夫卡消费者收到相同信息
我是卡夫卡新手,我有一个使用JavaApacheCamel库实现的卡夫卡消费者。我发现的问题是-消费者需要很长时间(>15分钟)来处理少量消息-这对于我们的用例来说是很好的 需要一些配置帮助,因为如果在15分钟内未处理相同的消息,则该消息将在15分钟后重新发送(我相信线程控制不会返回)。我想这可能是默认间隔,不确定这是哪个属性 那么,我在哪里可以修复配置Java 卡夫卡消费者收到相同信息,java,apache-kafka,apache-camel,producer-consumer,Java,Apache Kafka,Apache Camel,Producer Consumer,我是卡夫卡新手,我有一个使用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}&
groupId=${apollo.janitor.event.group.id}&
consumersCount=${apollo.janitor.event.consumer.count}&
consumerRequestTimeoutMs=${eventConsumerRequestTimeoutMs}&
sessionTimeoutMs=${eventConsumerSessionTimeoutMs}&
maxPartitionFetchBytes=${eventConsumerMaxPartitionFetchBytes}" />
KafkaManualCommit manual =
exchange.getIn().getHeader(KafkaConstants.MANUAL_COMMIT, KafkaManualCommit.class);
manual.commitSync();