Spring integration 使用spring integration kafka重新处理maprstream消息

Spring integration 使用spring integration kafka重新处理maprstream消息,spring-integration,kafka-consumer-api,spring-kafka,mapr-streams,Spring Integration,Kafka Consumer Api,Spring Kafka,Mapr Streams,这与相关,我正在使用spring集成kafka 2.0来使用来自mapr流主题的消息。 使用偏移和主题分区重新处理maprstream消息这一功能,我面临着一些困难 如果我可以集成搜索功能,我将能够根据偏移量值重新处理消息 有人能帮我在spring integration Kafka中集成Kafka消费者功能吗?当前用户配置如下所述: <int-kafka:message-driven-channel-adapter id="kafkaListener" listener

这与相关,我正在使用spring集成kafka 2.0来使用来自mapr流主题的消息。 使用偏移和主题分区重新处理maprstream消息这一功能,我面临着一些困难

如果我可以集成搜索功能,我将能够根据偏移量值重新处理消息

有人能帮我在spring integration Kafka中集成Kafka消费者功能吗?当前用户配置如下所述:

 <int-kafka:message-driven-channel-adapter
    id="kafkaListener"
    listener-container="container1"
    auto-startup="true"
    phase="100"
    send-timeout="5000"
    channel="inputFromStream"
    error-channel="errorChannel" />

<bean id="container1" class="org.springframework.kafka.listener.KafkaMessageListenerContainer">
    <constructor-arg>
        <bean class="org.springframework.kafka.core.DefaultKafkaConsumerFactory">
            <constructor-arg>
            <map>
                <entry key="bootstrap.servers" value="localhost:9092"/>
                <entry key="group.id" value="siTestGroup1"/>
                <entry key="enable.auto.commit" value="true"/>
                <entry key="auto.commit.interval.ms" value="1000"/>
                <entry key="auto.offset.reset" value="earliest" /> 
                <entry key="max.partition.fetch.bytes" value="3145728"/>
                <entry key="key.deserializer" value="org.apache.kafka.common.serialization.StringDeserializer"/>
                <entry key="value.deserializer" value="org.apache.kafka.common.serialization.StringDeserializer"/> 
            </map>
            </constructor-arg>
        </bean>
    </constructor-arg>
    <constructor-arg>
        <bean class="org.springframework.kafka.listener.config.ContainerProperties">
            <constructor-arg name="topics" value="${maprstream.topicname}" />
        </bean>
    </constructor-arg> 
</bean>

使用一个
ConsumerAwareRebalanceListener
-这就是Spring Cloud Stream如何做到的

final AtomicBoolean initialAssignment = new AtomicBoolean(true);
if (!"earliest".equals(resetTo) && "!latest".equals(resetTo)) {
    logger.warn("no (or unknown) " + ConsumerConfig.AUTO_OFFSET_RESET_CONFIG +
            " property cannot reset");
    resetOffsets = false;
}
if (groupManagement && resetOffsets) {
    containerProperties.setConsumerRebalanceListener(new ConsumerAwareRebalanceListener() {

        @Override
        public void onPartitionsRevokedBeforeCommit(Consumer<?, ?> consumer, Collection<TopicPartition> tps) {
            // no op
        }

        @Override
        public void onPartitionsRevokedAfterCommit(Consumer<?, ?> consumer, Collection<TopicPartition> tps) {
            // no op
        }

        @Override
        public void onPartitionsAssigned(Consumer<?, ?> consumer, Collection<TopicPartition> tps) {
            if (initialAssignment.getAndSet(false)) {
                if ("earliest".equals(resetTo)) {
                    consumer.seekToBeginning(tps);
                }
                else if ("latest".equals(resetTo)) {
                    consumer.seekToEnd(tps);
                }
            }
        }
    });
}
else if (resetOffsets) {
    Arrays.stream(containerProperties.getTopicPartitions())
            .map(tpio -> new TopicPartitionInitialOffset(tpio.topic(), tpio.partition(),
                    // SK GH-599     "earliest".equals(resetTo) ? SeekPosition.BEGINNING : SeekPosition.END))
                    "earliest".equals(resetTo) ? 0L : Long.MAX_VALUE))
            .collect(Collectors.toList()).toArray(containerProperties.getTopicPartitions());
}
final AtomicBoolean initialAssignment=新的AtomicBoolean(true);
如果(!“最早的”.equals(resetTo)&&&“最晚的”.equals(resetTo)){
logger.warn(“否(或未知)”+ConsumerConfig.AUTO\u OFFSET\u RESET\u CONFIG+
“财产无法重置”);
resetoffset=false;
}
如果(组管理和重置偏移量(&R)){
containerProperties.SetConsumerBalanceListener(新的ConsumerRawareRebalanceListener()){
@凌驾
重新提交前PartitionsRevokedb上的公共无效(消费者、收集tps){
//无操作
}
@凌驾
PartitionsRevokedAfterCommit(消费者、收集tps)上的公共无效{
//无操作
}
@凌驾
已签名分区上的公共无效(消费者、集合tps){
if(initialAssignment.getAndSet(false)){
如果(“最早”。等于(重置为)){
消费者。参见测试计划(tps);
}
否则,如果(“最新”。等于(重置为)){
消费者。seekToEnd(tps);
}
}
}
});
}
否则如果(重置偏移){
stream(containerProperties.getTopicPartitions())
.map(tpio->new-TopicPartitionInitialOffset(tpio.topic(),tpio.partition(),
//SK GH-599“最早”。等于(重置到)?搜索位置。开始:搜索位置。结束)
“最早”。等于(重置为)?0L:长。最大值)
.collect(Collectors.toList()).toArray(containerProperties.getTopicPartitions());
}

感谢Gary的更新,但我正在使用以下Jar组合:Spring for Apache Kafka 1.0.3,Spring Integration for Apache Kafka 2.0.1,Kafka Client 0.9.0.0-mapr-1607,正如帖子所述,此版本似乎不支持ConsumeraWareBalanceListener。正确;-通过单击标记图标旁边的
,可以查看它在哪些版本中可用。在mapr人员升级到更新的客户端之前,您是运气不佳的。0.9.x.x在卡夫卡世界是古老的。