Skip to content

replication.factor fail on topic with URP not null #1117

@raphaelauv

Description

@raphaelauv

Issue submitter TODO list

  • I've looked up my issue in FAQ
  • I've searched for an already existing issues here
  • I've tried running main-labeled docker image and the issue still persists there
  • I'm running a supported version of the application which is listed here

Describe the bug (actual behavior)

Changing replication.factor fail with

2025-06-03 22:30:20,899 ERROR [parallel-1] o.s.b.a.w.r.e.AbstractErrorWebExceptionHandler: [e6d0bb7d-56]  500 Server Error for HTTP PATCH "/api/clusters/local/topics/topic-3/replications"
2025-06-03T22:30:20.901407327Z java.lang.NullPointerException: Cannot invoke "java.lang.Integer.intValue()" because the return value of "java.util.Map.get(Object)" is null
2025-06-03T22:30:20.901413379Z 	at io.kafbat.ui.service.TopicsService.lambda$getBrokersMap$27(TopicsService.java:377)
2025-06-03T22:30:20.901417352Z 	Suppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException: 
2025-06-03T22:30:20.901420782Z Error has been observed at the following site(s):
2025-06-03T22:30:20.901424032Z 	*__checkpoint ⇢ Handler io.kafbat.ui.controller.TopicsController#changeReplicationFactor(String, String, Mono, ServerWebExchange) [DispatcherHandler]
2025-06-03T22:30:20.901427921Z 	*__checkpoint ⇢ io.kafbat.ui.config.CorsGlobalConfiguration$$Lambda/0x0000784fc669e2f8 [DefaultWebFilterChain]
2025-06-03T22:30:20.901431242Z 	*__checkpoint ⇢ io.kafbat.ui.config.ReadOnlyModeFilter [DefaultWebFilterChain]
2025-06-03T22:30:20.901434561Z 	*__checkpoint ⇢ io.kafbat.ui.config.CustomWebFilter [DefaultWebFilterChain]
2025-06-03T22:30:20.901437791Z 	*__checkpoint ⇢ AuthorizationWebFilter [DefaultWebFilterChain]
2025-06-03T22:30:20.901440954Z 	*__checkpoint ⇢ ExceptionTranslationWebFilter [DefaultWebFilterChain]
2025-06-03T22:30:20.901444129Z 	*__checkpoint ⇢ LogoutWebFilter [DefaultWebFilterChain]
2025-06-03T22:30:20.901447364Z 	*__checkpoint ⇢ ServerRequestCacheWebFilter [DefaultWebFilterChain]
2025-06-03T22:30:20.901450558Z 	*__checkpoint ⇢ SecurityContextServerWebExchangeWebFilter [DefaultWebFilterChain]
2025-06-03T22:30:20.901453755Z 	*__checkpoint ⇢ ReactorContextWebFilter [DefaultWebFilterChain]
2025-06-03T22:30:20.901456960Z 	*__checkpoint ⇢ HttpHeaderWriterWebFilter [DefaultWebFilterChain]
2025-06-03T22:30:20.901460190Z 	*__checkpoint ⇢ ServerWebExchangeReactorContextWebFilter [DefaultWebFilterChain]
2025-06-03T22:30:20.901463410Z 	*__checkpoint ⇢ org.springframework.security.web.server.WebFilterChainProxy [DefaultWebFilterChain]
2025-06-03T22:30:20.901466749Z 	*__checkpoint ⇢ HTTP PATCH "/api/clusters/local/topics/topic-3/replications" [ExceptionHandlingWebHandler]
2025-06-03T22:30:20.901488020Z Original Stack Trace:
2025-06-03T22:30:20.901490715Z 		at io.kafbat.ui.service.TopicsService.lambda$getBrokersMap$27(TopicsService.java:377)
2025-06-03T22:30:20.901493046Z 		at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
2025-06-03T22:30:20.901496986Z 		at io.kafbat.ui.service.TopicsService.lambda$getBrokersMap$28(TopicsService.java:377)
2025-06-03T22:30:20.901499333Z 		at java.base/java.util.HashMap$Values.forEach(HashMap.java:1073)
2025-06-03T22:30:20.901501478Z 		at io.kafbat.ui.service.TopicsService.getBrokersMap(TopicsService.java:376)
2025-06-03T22:30:20.901503648Z 		at io.kafbat.ui.service.TopicsService.getPartitionsReassignments(TopicsService.java:288)
2025-06-03T22:30:20.901505818Z 		at io.kafbat.ui.service.TopicsService.lambda$changeReplicationFactor$19(TopicsService.java:273)
2025-06-03T22:30:20.901508015Z 		at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:132)
2025-06-03T22:30:20.901510144Z 		at reactor.core.publisher.FluxMap$MapSubscriber.onNext(FluxMap.java:122)
2025-06-03T22:30:20.901512232Z 		at reactor.core.publisher.FluxSwitchIfEmpty$SwitchIfEmptySubscriber.onNext(FluxSwitchIfEmpty.java:74)
2025-06-03T22:30:20.901514409Z 		at reactor.core.publisher.Operators$ScalarSubscription.request(Operators.java:2570)
2025-06-03T22:30:20.901516533Z 		at reactor.core.publisher.Operators$MultiSubscriptionSubscriber.set(Operators.java:2366)
2025-06-03T22:30:20.901518747Z 		at reactor.core.publisher.Operators$MultiSubscriptionSubscriber.onSubscribe(Operators.java:2240)
2025-06-03T22:30:20.901520897Z 		at reactor.core.publisher.MonoJust.subscribe(MonoJust.java:55)
2025-06-03T22:30:20.901523006Z 		at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:76)
2025-06-03T22:30:20.901525160Z 		at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:165)
2025-06-03T22:30:20.901527293Z 		at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:158)
2025-06-03T22:30:20.901529368Z 		at reactor.core.publisher.MonoFlatMap$FlatMapMain.secondComplete(MonoFlatMap.java:245)
2025-06-03T22:30:20.901531518Z 		at reactor.core.publisher.MonoFlatMap$FlatMapInner.onNext(MonoFlatMap.java:305)
2025-06-03T22:30:20.901533643Z 		at reactor.core.publisher.FluxMap$MapSubscriber.onNext(FluxMap.java:122)
2025-06-03T22:30:20.901535948Z 		at reactor.core.publisher.FluxMap$MapSubscriber.onNext(FluxMap.java:122)
2025-06-03T22:30:20.901538042Z 		at reactor.core.publisher.MonoZip$ZipCoordinator.signal(MonoZip.java:297)
2025-06-03T22:30:20.901540187Z 		at reactor.core.publisher.MonoZip$ZipInner.onNext(MonoZip.java:478)
2025-06-03T22:30:20.901542296Z 		at reactor.core.publisher.MonoReduce$ReduceSubscriber.onComplete(MonoReduce.java:197)
2025-06-03T22:30:20.901544516Z 		at reactor.core.publisher.FluxConcatMapNoPrefetch$FluxConcatMapNoPrefetchSubscriber.innerComplete(FluxConcatMapNoPrefetch.java:287)
2025-06-03T22:30:20.901550109Z 		at reactor.core.publisher.FluxConcatMap$ConcatMapInner.onComplete(FluxConcatMap.java:889)
2025-06-03T22:30:20.901553006Z 		at reactor.core.publisher.FluxMap$MapSubscriber.onComplete(FluxMap.java:144)
2025-06-03T22:30:20.901555251Z 		at reactor.core.publisher.MonoZip$ZipCoordinator.signal(MonoZip.java:298)
2025-06-03T22:30:20.901557430Z 		at reactor.core.publisher.MonoZip$ZipInner.onNext(MonoZip.java:478)
2025-06-03T22:30:20.901559574Z 		at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onNext(FluxOnErrorResume.java:79)
2025-06-03T22:30:20.901561758Z 		at reactor.core.publisher.FluxDefaultIfEmpty$DefaultIfEmptySubscriber.onNext(FluxDefaultIfEmpty.java:122)
2025-06-03T22:30:20.901563980Z 		at reactor.core.publisher.FluxMap$MapSubscriber.onNext(FluxMap.java:122)
2025-06-03T22:30:20.901566088Z 		at reactor.core.publisher.MonoPublishOn$PublishOnSubscriber.run(MonoPublishOn.java:181)
2025-06-03T22:30:20.901568223Z 		at reactor.core.scheduler.SchedulerTask.call(SchedulerTask.java:68)
2025-06-03T22:30:20.901570315Z 		at reactor.core.scheduler.SchedulerTask.call(SchedulerTask.java:28)
2025-06-03T22:30:20.901572403Z 		at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
2025-06-03T22:30:20.901574556Z 		at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304)
2025-06-03T22:30:20.901576847Z 		at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
2025-06-03T22:30:20.901579016Z 		at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
2025-06-03T22:30:20.901581186Z 		at java.base/java.lang.Thread.run(Thread.java:1583)

when trying to change the replication.factor from 2 to 1 on this topic ->

Image

Image

Expected behavior

It should works
cause using kafka-reassign-partitions.sh I do not have any error

Your installation details

using ghcr.io/kafbat/kafka-ui:main

with confluentinc/cp-kafka:7.9.1 (kraft)

Steps to reproduce

if there is no URP ( no missing broker) then it works

Screenshots

No response

Logs

No response

Additional context

No response

Metadata

Metadata

Assignees

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions