我将spring-kafka用于springboot 2.0.4.RELEASE。
并使用KafkaListener获取消息
现在我想为我的组重置偏移量
但是我不知道如何吸引该群体的消费者
@KafkaListener(id="test",topics={"test"},groupId="group",containerFactory="batchContainerFactory")
public String listenTopic33(List<ConsumerRecord<Integer, String>> record, Acknowledgment ack){
// do something
}
@Autowired
KafkaListenerEndpointRegistry kafkaListenerEndpointRegistry;
public void test() {
MessageListenerContainer test3 = kafkaListenerEndpointRegistry.getListenerContainer("test3");
}
答案 0 :(得分:0)
如果要在侦听器本身中寻找使用者,只需在侦听器方法中添加一个awk -F'[|]' '$8=="U"{print|"tee -a log1 >&2"; next} 1' file
参数即可。
请记住,该容器可能已提取了更多消息,因此您将在搜索生效之前获取它们。您可以设置Consumer<?, ?> consumer
来避免这种情况。
您还可以向容器中添加自定义max.poll.records=1
,在侦听器中引发异常,错误处理程序将获取其余记录而不是侦听器。
另请参阅Seeking to a Specific Offset。
为了进行搜索,您的侦听器必须实现ConsumerSeekAware,它具有以下方法:
RemainingRecordsErrorHandler
启动容器时调用第一个方法。在初始化后的任意时间搜索时,应使用此回调。您应该保存对回调的引用。如果在多个容器(或ConcurrentMessageListenerContainer)中使用相同的侦听器,则应将回调存储在ThreadLocal或由侦听器线程作为键的其他结构中。
使用组管理时,分配更改时将调用第二种方法。您可以使用此方法,例如,通过调用回调来设置分区的初始偏移量。您必须使用回调参数,而不是传递给registerSeekCallback的参数。如果您自己明确分配分区,则永远不会调用此方法。在这种情况下,请使用TopicPartitionInitialOffset。
回调具有以下方法:
void registerSeekCallback(ConsumerSeekCallback callback);
void onPartitionsAssigned(Map<TopicPartition, Long> assignments, ConsumerSeekCallback callback);
void onIdleContainer(Map<TopicPartition, Long> assignments, ConsumerSeekCallback callback);
当检测到空闲容器时,您还可以从onIdleContainer()执行查找操作。有关如何启用空闲容器检测的信息,请参阅检测空闲和无响应的使用者。
要在运行时任意查找,请使用registerSeekCallback中的回调引用作为适当的线程。
这是一个例子;我们会跟踪每个主题/分区的回调...
void seek(String topic, int partition, long offset);
void seekToBeginning(String topic, int partition);
void seekToEnd(String topic, int partition);