我有一些方案可以使用Kafka执行一些管理任务。
主题A包含10个分区。有5个不同的应用程序使用来自主题A的消息,每个应用程序(app1,app2,app3,app4,app5)都有自己的消费者“group.id”(group1,group2,group3,group4,group5),因此每个应用程序都可以与他们自己的抵消单独工作。 auto offset commit设置为true。每个应用程序的使用者组中的消费者数量是不同的(例如app1在group1中有10个使用者,app2在group2中有5个使用者)。
现在管理员想要,
case-1:将app2的偏移量从当前偏移位置(X)转发5个位置。对于这个任务,你应该停止app2并创建一个KafkaConsumer(而不是spring),组ID与app2相同,即“group2”并提交新的偏移X + 5并启动app2吗?
case-2:将主题A的所有应用程序的偏移量从其当前偏移位置(X)转发5个位置,假设所有应用程序都处于相同的偏移量X.对于此任务,是否应停止所有应用程序并创建一个空组ID为“”的KafkaConsumer,并提交新的偏移量X + 5并启动所有应用程序?或者类似于case-1但是对于每个应用程序单独进行?
或者有没有更好的方法来处理kafka?
答案 0 :(得分:1)
ConsumerSeekAware
不帮你吗?
为了寻求,您的听众必须实施
ConsumerSeekAware
,其中包含以下方法:
void registerSeekCallback(ConsumerSeekCallback callback);
void onPartitionsAssigned(Map<TopicPartition, Long> assignments, ConsumerSeekCallback callback);
void onIdleContainer(Map<TopicPartition, Long> assignments, ConsumerSeekCallback callback);
要在运行时任意搜索,请使用
registerSeekCallback
中针对相应线程的回调引用。
https://docs.spring.io/spring-kafka/docs/2.0.1.RELEASE/reference/html/_reference.html#seek