Skip to content

KAFKA-12382: add a README for KIP-500#10227

Merged
cmccabe merged 6 commits intoapache:trunkfrom
cmccabe:kip-500-readme
Mar 18, 2021
Merged

KAFKA-12382: add a README for KIP-500#10227
cmccabe merged 6 commits intoapache:trunkfrom
cmccabe:kip-500-readme

Conversation

@cmccabe
Copy link
Copy Markdown
Contributor

@cmccabe cmccabe commented Feb 27, 2021

No description provided.

@cmccabe cmccabe added the kraft label Feb 27, 2021
@cmccabe cmccabe changed the title MINOR: add a README for KIP-500 KAFKA-12382: add a README for KIP-500 Feb 27, 2021
Copy link
Copy Markdown
Contributor

@rondagostino rondagostino left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good! I left a few minor comments.

Comment thread KIP-500.md Outdated
Comment thread KIP-500.md Outdated
Comment thread KIP-500.md Outdated
Comment thread KIP-500.md Outdated
Comment thread KIP-500.md Outdated
Comment thread KIP-500.md Outdated
Comment thread KIP-500.md Outdated
Comment thread KIP-500.md Outdated
Comment thread KIP-500.md Outdated
Co-authored-by: Tom Bentley <tombentley@users.noreply.github.com>
Comment thread KIP-500.md
Self-managed mode in Kafka 2.8 is provided for testing only, *NOT* for production. We do not yet support upgrading existing ZooKeeper-based Kafka clusters into this mode. In fact, when Kafka 3.0 is released, it may not even be possible to upgrade your self-managed clusters from 2.8 to 3.0 without downtime. There may be bugs, including serious ones. You should *assume that your data could be lost at any time* if you try the early access release of KIP-500.

## Generate a cluster ID
The first step is to generate an ID for your new cluster, using the kafka-storage tool:
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It would be useful to add a couple sentences of explanation for the clusterId generation and the storage tool since these are new. To keep the instructions concise here, maybe we could refer to a separate section which has more background.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hmm, I'm not sure what else to add here. Can you give an example?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why do we have this tool? Users will certainly ask that since these steps were not needed before. There are good reasons for it, so why don't we give a couple sentences of explanation?

Comment thread KIP-500.md
# Deployment
Unlike in ZooKeeper-based mode, where any server can become the controller, in self-managed mode, only a small group of specially selected servers can act as controllers. The specially selected controller servers will participate in the metadata quorum. Each KIP-500 controller server is either active, or a hot standby for the current active controller server.

Typically you will select either 3 or 5 servers for this role, depending on the size of your cluster. Just like with ZooKeeper, you must keep a majority of the controllers alive in order to maintain availability. So if you have 3 controllers, you can tolerate 1 failure; with 5 controllers, you can tolerate 2 failures.
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I wonder if it's worth saying something about the relation between process.roles, controller.quorum.voters, and controller.listeners.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hmm, I'm not sure what to add...

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think the main thing is emphasizing that they need to be set consistently. We don't say anything about quorum.voters in this README currently, but it's important to understand the basics of how to configure it to run a multi-node setup.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I added a section about quorum.voters

Comment thread config/nozk-broker.properties
Comment thread KIP-500.md Outdated
Copy link
Copy Markdown
Contributor

@hachikuji hachikuji left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM. Left two small comments.

Comment thread KIP-500.md Outdated
Nodes that act as both brokers and controllers are referred to as "combined" nodes. The advantage of using combined nodes you will have uses fewer Java Virtual Machines (JVMs). This will allow you to avoid some of the fixed memory overheads associated with JVMs. The disdavantage is that the controller will be less isolated from the rest of the system. For example, if activity on the broker causes an out of memory condition, the controller part of the server is not isolated from that OOM condition.

## Quorum Voters
All nodes in the system must set the `quorum.voters` configuration. This identifies the quorum controller servers that should be used. All the controllers must be enumerated. This is similar to how, when using ZooKeeper, the `zookeeper.connect` configuration must contain all the ZooKeeper servers. Unlike with the ZK config, however, `quorum.voters` also has IDs for each node. The format is id1@host1:port1,id2@host2:port2, etc.
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should be controller.quorum.voters

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

good catch

Comment thread KIP-500.md
So if you have 10 brokers and 3 controllers named controller1, controller2, controller3, you might have the following `quorum.voters` configuration:
```
1@controller1.example.com:9093,2@controller2.example.com:9093,3@controller3.example.com:9093
```
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you include an example of the listener configuration. Just something which emphasizes that port 9093 is defined as the controller listener. For example:

node.id=1
listeners=CONTROLLER://controller1.example.com:9093
controller.listener.name=CONTROLLER

@cmccabe cmccabe merged commit dc6ea93 into apache:trunk Mar 18, 2021
@cmccabe cmccabe deleted the kip-500-readme branch March 18, 2021 17:27
cmccabe added a commit that referenced this pull request Mar 18, 2021
Reviewers: Tom Bentley <tbentley@redhat.com>, Ron Dagostino <rdagostino@confluent.io>, Jason Gustafson <jason@confluent.io>
ijuma added a commit to confluentinc/kafka that referenced this pull request Mar 19, 2021
Conflicts:
* build.gradle: keep `dependencySubstitution` Confluent addition in
`resolutionStrategy` and take upstream changes.

Commits:
* apache-github/trunk:
  KAFKA-12503: inform threads to resize their cache instead of doing so for them (apache#10356)
  KAFKA-10697: Remove ProduceResponse.responses (apache#10332)
  MINOR: Exclude KIP-500.md from rat check (apache#10354)
  MINOR: Move `configurations.all` to be a child of `allprojects` (apache#10349)
  MINOR: Remove use of `NoSuchElementException` in `KafkaMetadataLog` (apache#10344)
  MINOR: Start the broker-to-controller channel for request forwarding (apache#10340)
  KAFKA-12382: add a README for KIP-500 (apache#10227)
  MINOR: Fix BaseHashTable sizing (apache#10334)
  KAFKA-10357: Add setup method to internal topics (apache#10317)
  MINOR: remove redundant null check when testing specified type (apache#10314)
  KAFKA-12293: Remove JCenter from buildscript and delete buildscript.gradle
  KAFKA-12491: Make rocksdb an `api` dependency for `streams` (apache#10341)
  KAFKA-12454: Add ERROR logging on kafka-log-dirs when given brokerIds do not  exist in current kafka cluster (apache#10304)
  KAFKA-12459; Use property testing library for raft event simulation tests (apache#10323)
  MINOR: fix failing ZooKeeper system tests (apache#10297)
  MINOR: fix client_compatibility_features_test.py (apache#10292)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants