[英]Spring cloud stream, kafka binder - seek on demand
我使用 spring 雲 stream 和 kafka。 我有一個主題X
,分區Y
和消費者組Z
Spring boot starter parent 2.7.2
kafka version 2.8.8
:
@StreamListener("input-channel-name")
public void processMessage(final DomainObject domainObject) {
// some processing
}
它工作正常。
我想在應用程序中有一個端點,它允許我重新讀取/重新處理( seek
對嗎?) XY
中的所有消息(再次)。 但不是在重新平衡( ConsumerSeekAware#onPartitionsAssigned
)之后或應用程序重啟之后( KafkaConsumerProperties#resetOffsets
),而是像這樣按需:
@RestController
@Slf4j
@RequiredArgsConstructor
public class SeekController {
@GetMapping
public void seekToBeginningForDomainObject() {
/**
* seekToBeginning for X, Y, input-channel-name
*/
}
}
我就是做不到。 甚至有可能嗎? 我知道我必須在消費者層面上這樣做,可能是在@StreamListener("input-channel-name")
訂閱之后創建的,對吧? 但我不知道如何獲得該消費者。 如何執行按需搜索讓kafka再次向消費者發送消息? 我只想將XYZ
的偏移量重置為0
,以便再次制作應用程序、加載和處理所有消息。
KafkaBindingRebalanceListener.onPartitionsAssigned()
提供了一個boolean來表示這是否是一個初始賦值Vs。 重新平衡分配。
Spring 雲 stream 目前不支持運行時的任意搜索,即使底層KafkaMessageDrivenChannelAdapter
確實支持訪問ConsumerSeekCallback
(允許在輪詢之間任意搜索)。 它需要增強活頁夾以允許訪問此代碼。
但是,可以在事件偵聽器中使用空閑容器事件; 該事件包含消費者,因此您可以在這些條件下進行任意搜索。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.