@@ -4072,42 +4072,32 @@ <h5 class="anchor-heading"><a id="static_versus_dynamic_kraft_quorums" class="an
4072
4072
If you are not sure whether you are using static or dynamic quorums, you can determine this by
4073
4073
running something like the following:< p >
4074
4074
4075
- < pre > < code class = "language-bash" >
4076
- $ bin/kafka-features.sh --bootstrap-controller localhost:9093 describe
4077
- </ code > </ pre > < p >
4078
-
4079
- If the < code > kraft.version</ code > field is level 0 or absent, you are using a static quorum. If
4080
- it is 1 or above, you are using a dynamic quorum. For example, here is an example of a static
4081
- quorum:< p />
4082
- < pre > < code class = "language-bash" >
4083
- Feature: kraft.version SupportedMinVersion: 0 SupportedMaxVersion: 1 FinalizedVersionLevel: 0 Epoch: 5
4084
- Feature: metadata.version SupportedMinVersion: 3.3-IV3 SupportedMaxVersion: 3.9-IV0 FinalizedVersionLevel: 3.9-IV0 Epoch: 5
4085
- </ code > </ pre > < p />
4086
-
4087
- Here is another example of a static quorum:< p />
4088
- < pre > < code class = "language-bash" >
4089
- Feature: metadata.version SupportedMinVersion: 3.3-IV3 SupportedMaxVersion: 3.8-IV0 FinalizedVersionLevel: 3.8-IV0 Epoch: 5
4090
- </ code > </ pre > < p />
4091
-
4092
- Here is an example of a dynamic quorum:< p />
4093
- < pre > < code class = "language-bash" >
4094
- Feature: kraft.version SupportedMinVersion: 0 SupportedMaxVersion: 1 FinalizedVersionLevel: 1 Epoch: 5
4095
- Feature: metadata.version SupportedMinVersion: 3.3-IV3 SupportedMaxVersion: 3.9-IV0 FinalizedVersionLevel: 3.9-IV0 Epoch: 5
4096
- </ code > </ pre > < p />
4097
-
4098
- The static versus dynamic nature of the quorum is determined at the time of formatting.
4099
- Specifically, the quorum will be formatted as dynamic if < code > controller.quorum.voters</ code > is
4100
- < b > not</ b > present, and if the software version is Apache Kafka 3.9 or newer. If you have
4101
- followed the instructions earlier in this document, you will get a dynamic quorum.< p >
4102
-
4103
- If you would like the formatting process to fail if a dynamic quorum cannot be achieved, format your
4104
- controllers using the < code > --feature kraft.version=1</ code > . (Note that you should not supply
4105
- this flag when formatting brokers -- only when formatting controllers.)< p >
4106
-
4107
- < pre > < code class = "language-bash" >
4108
- $ bin/kafka-storage.sh format -t KAFKA_CLUSTER_ID --feature kraft.version=1 -c controller.properties
4109
- </ code > </ pre > < p >
4075
+ < pre > < code class = "language-bash" > $ bin/kafka-features.sh --bootstrap-controller localhost:9093 describe</ code > </ pre >
4076
+ < p >
4077
+ If the < code > kraft.version</ code > field is level 0 or absent, you are using a static quorum. If
4078
+ it is 1 or above, you are using a dynamic quorum. For example, here is an example of a static
4079
+ quorum:< p >
4080
+ < pre > < code class = "language-bash" > Feature: kraft.version SupportedMinVersion: 0 SupportedMaxVersion: 1 FinalizedVersionLevel: 0 Epoch: 5
4081
+ Feature: metadata.version SupportedMinVersion: 3.3-IV3 SupportedMaxVersion: 3.9-IV0 FinalizedVersionLevel: 3.9-IV0 Epoch: 5</ code > </ pre >
4082
+ < p >
4083
+ Here is another example of a static quorum:< p >
4084
+ < pre > < code class = "language-bash" > Feature: metadata.version SupportedMinVersion: 3.3-IV3 SupportedMaxVersion: 3.8-IV0 FinalizedVersionLevel: 3.8-IV0 Epoch: 5</ code > </ pre >
4085
+ < p >
4086
+ Here is an example of a dynamic quorum:< p >
4087
+ < pre > < code class = "language-bash" > Feature: kraft.version SupportedMinVersion: 0 SupportedMaxVersion: 1 FinalizedVersionLevel: 1 Epoch: 5
4088
+ Feature: metadata.version SupportedMinVersion: 3.3-IV3 SupportedMaxVersion: 3.9-IV0 FinalizedVersionLevel: 3.9-IV0 Epoch: 5</ code > </ pre >
4089
+ < p >
4090
+ The static versus dynamic nature of the quorum is determined at the time of formatting.
4091
+ Specifically, the quorum will be formatted as dynamic if < code > controller.quorum.voters</ code > is
4092
+ < b > not</ b > present, and if the software version is Apache Kafka 3.9 or newer. If you have
4093
+ followed the instructions earlier in this document, you will get a dynamic quorum.< p >
4094
+
4095
+ If you would like the formatting process to fail if a dynamic quorum cannot be achieved, format your
4096
+ controllers using the < code > --feature kraft.version=1</ code > . (Note that you should not supply
4097
+ this flag when formatting brokers -- only when formatting controllers.)< p >
4110
4098
4099
+ < pre > < code class = "language-bash" > $ bin/kafka-storage.sh format -t KAFKA_CLUSTER_ID --feature kraft.version=1 -c controller.properties</ code > </ pre >
4100
+ < p >
4111
4101
Note: To migrate from static voter set to dynamic voter set, please refer to the < a href = "#kraft_upgrade" > Upgrade</ a > section.
4112
4102
4113
4103
< h5 class = "anchor-heading" > < a id = "kraft_reconfig_add" class = "anchor-link" > </ a > < a href = "#kraft_reconfig_add" > Add New Controller</ a > </ h5 >
@@ -4156,7 +4146,7 @@ <h5 class="anchor-heading"><a id="kraft_dump_log" class="anchor-link"></a><a hre
4156
4146
4157
4147
< pre > < code class = "language-bash" > $ bin/kafka-dump-log.sh --cluster-metadata-decoder --files metadata_log_dir/__cluster_metadata-0/00000000000000000000.log</ code > </ pre >
4158
4148
4159
- < p > This command decodes and prints the records in the a cluster metadata snapshot:</ p >
4149
+ < p > This command decodes and prints the records in a cluster metadata snapshot:</ p >
4160
4150
4161
4151
< pre > < code class = "language-bash" > $ bin/kafka-dump-log.sh --cluster-metadata-decoder --files metadata_log_dir/__cluster_metadata-0/00000000000000000100-0000000001.checkpoint</ code > </ pre >
4162
4152
@@ -4186,7 +4176,7 @@ <h5 class="anchor-heading"><a id="kraft_shell_tool" class="anchor-link"></a><a h
4186
4176
< h4 class = "anchor-heading" > < a id = "kraft_deployment" class = "anchor-link" > </ a > < a href = "#kraft_deployment" > Deploying Considerations</ a > </ h4 >
4187
4177
4188
4178
< ul >
4189
- < li > Kafka server's < code > process.role </ code > should be set to either < code > broker</ code > or < code > controller</ code > but not both. Combined mode can be used in development environments, but it should be avoided in critical deployment environments.</ li >
4179
+ < li > Kafka server's < code > process.roles </ code > should be set to either < code > broker</ code > or < code > controller</ code > but not both. Combined mode can be used in development environments, but it should be avoided in critical deployment environments.</ li >
4190
4180
< li > For redundancy, a Kafka cluster should use 3 or more controllers, depending on factors like cost and the number of concurrent failures your system should withstand without availability impact. For the KRaft controller cluster to withstand < code > N</ code > concurrent failures the controller cluster must include < code > 2N + 1</ code > controllers.</ li >
4191
4181
< li > The Kafka controllers store all the metadata for the cluster in memory and on disk. We believe that for a typical Kafka cluster 5GB of main memory and 5GB of disk space on the metadata log director is sufficient.</ li >
4192
4182
</ ul >
0 commit comments