Hi Jianbin,

It'd be great if you could try it first in another environment with the
in-place migration.
I've never done this before.
But please remember, even if it _might_ work, it is not under tested and
might not be supported.

I had a quick look at the config:
> process.roles=broker,controller
Why do you set the broker config as dual role? It is not supported for
KRaft migration.


Thank you,
Luke

On Thu, Jan 29, 2026 at 10:20 AM Jianbin Chen <[email protected]> wrote:

> Could someone please help answer this question? I would really appreciate
> it—thank you!
>
> Jianbin Chen <[email protected]> 于2026年1月28日周三 16:19写道:
>
> >
> >
> > ---------- Forwarded message ---------
> > 发件人: Jianbin Chen <[email protected]>
> > Date: 2026年1月28日周三 09:49
> > Subject: Inquiry about migrating from ZooKeeper to KRaft
> > To: <[email protected]>
> >
> >
> > Hi everyone,
> >
> > I’m trying to migrate a test cluster from ZooKeeper to KRaft in-place
> > (i.e., not provisioning three new controller-only nodes first and then
> > pointing the existing brokers to them). I hit a problem and would
> > appreciate any pointers.
> >
> > What I did
> > - Enabled zookeeper.metadata.migration.enable on each existing broker and
> > set the controller quorum settings so each broker acts as a
> > controller+broker (process.roles=broker,controller).
> > - Rolled the three nodes.
> >
> > Relevant broker configuration (each broker has similar config; example
> > shown):
> >
> > ```
> > process.roles=broker,controller
> > node.id=7
> > broker.id=7
> > zookeeper.metadata.migration.enable=true
> > controller.quorum.voters=7@broker1:9093,6@broker2:9093,4@broker3:9093
> >
> controller.quorum.bootstrap.servers=broker1:9093,broker2:9093,broker3:9093
> > zookeeper.connect=zk1:2181,zk2:2181,zk3:2181
> > controller.listener.names=CONTROLLER
> > group.initial.rebalance.delay.ms=0
> > listeners=SSL://ip:9092,PLAINTEXT://ip:9192,CONTROLLER://ip:9093
> >
> >
> listener.security.protocol.map=SSL:SSL,PLAINTEXT:PLAINTEXT,CONTROLLER:PLAINTEXT
> > ```
> >
> > Observed behavior
> > After rolling restart, the controller logs show the quorum is ready for
> > migration, but the controller repeatedly logs that no brokers are known
> to
> > KRaft:
> >
> > ```
> > [2026-01-27 17:47:15,626] INFO [KRaftMigrationDriver id=7] Controller
> > Quorum is ready for Zk to KRaft migration. Now waiting for ZK brokers.
> > (org.apache.kafka.metadata.migration.KRaftMigrationDriver)
> > [2026-01-27 17:47:15,627] INFO [KRaftMigrationDriver id=7] 7
> transitioning
> > from WAIT_FOR_CONTROLLER_QUORUM to WAIT_FOR_BROKERS state
> > (org.apache.kafka.metadata.migration.KRaftMigrationDriver)
> > [2026-01-27 17:47:15,627] INFO [KRaftMigrationDriver id=7] No brokers are
> > known to KRaft, waiting for brokers to register.
> > (org.apache.kafka.metadata.migration.KRaftMigrationDriver)
> > [2026-01-27 17:47:15,726] INFO [KRaftMigrationDriver id=7] No brokers are
> > known to KRaft, waiting for brokers to register.
> > (org.apache.kafka.metadata.migration.KRaftMigrationDriver)
> > [2026-01-27 17:47:15,925] INFO [KRaftMigrationDriver id=7] No brokers are
> > known to KRaft, waiting for brokers to register.
> > ```
> > It appears that the controller quorum becomes ready for migration, but
> the
> > migration driver repeatedly logs "No brokers are known to KRaft, waiting
> > for brokers to register." and does not make progress.
> >
> > My current understanding is as follows:
> > - Migration from ZooKeeper to KRaft normally involves standing up a
> > separate controller-only KRaft cluster first, then updating the existing
> > brokers to point to that controller cluster (via
> > controller.quorum.bootstrap.servers) and enabling
> > zookeeper.metadata.migration.enable.
> > - Performing an in-place migration (having the existing brokers also act
> > as controllers) seems risky because controller quorum elections require a
> > majority of controller nodes. For example, with topics having
> > replication.factor=2, you may need to restart two brokers to form the new
> > controller quorum, which would make RF=2 topics unavailable during the
> > migration.
> > - Therefore I am unsure whether my understanding is correct (i.e.,
> > in-place migration is unsafe or unsupported for production-like setups)
> or
> > whether Kafka actually supports in-place migration and I have a
> > configuration error.
> >
> > I would greatly appreciate it if you could confirm which is the case. If
> > in-place migration is supported, could you please advise what
> configuration
> > or sequence I am missing so that brokers register with KRaft correctly?
> If
> > in-place migration is not recommended, could you recommend the safest
> > procedure to migrate a test cluster while minimizing downtime for
> producers
> > and consumers?
> >
> > Thank you very much for your time and assistance.
> >
> > Best regards,
> > Jianbin Chen
> >
>

Reply via email to