Skip to main content

A three-node cluster with Apache Kafka

Apache Kafka is a distributed software message broker for real-time data stream processing from The Apache Software Foundation. The broker allows you to collect, store, and process large volumes of data from various sources and transfer them to data processing and analysis systems. Apache Kafka uses a three-node distributed cluster architecture for fault tolerance.

You can create a three-node cluster with a pre-installed Apache Kafka application. In Russia, the cluster nodes run on a configured SelectOS 1 64-bit operating system. In other countries, they run on Ubuntu 24.04.

Before creating a cloud server with an application, review the software license agreements included in the image.

Minimum resource requirements

Test environmentProduction environment
Number of vCPUs48
RAM8 GB32 GB
Boot volume16 GBfrom 16 GB *

* The boot volume size for a production environment depends on your needs.

Create a three-node cluster with Apache Kafka

In Servercore, to create a cluster, you must first create a temporary cloud server with Apache Kafka. Creating a temporary server initiates the creation of a three-node cluster. Each node is a cloud server with the configuration selected when creating the temporary cloud server.

The name of each server in the cluster will be in the format cs-<server_name>-<cluster_number>, where <server_name> is the server name and <cluster_number> is the server number in the cluster from 1 to 3.

The three created cloud servers are in the same subnet as the temporary cloud server.

Next, a Kafka cluster will be configured on three cloud servers. If the cluster is configured successfully, the temporary cloud server is deleted. If the temporary cloud server was not deleted, there was an issue during Kafka cluster configuration. To identify the problem, view the logs.

The cluster cost will be calculated as the cost of three cloud servers. Read more about the cloud platform payment model in the Payment Model and Pricing.

To configure Apache Kafka, when creating a server, specify the application parameters used to connect to the OpenStack API.

  1. Create a service user.

  2. Create a public floating IP address.

  3. Create a cloud server with Apache Kafka.

1. Create a service user

Create a service user, select the member or reader role and the Projects scope. Users can be created by the Account Owner or users with the iam.admin role.

2. Create a public floating IP address

Create a public floating IP address so the cloud server with Zabbix is accessible from the internet.

Use the Create a public floating IP address section of the Public floating IP addresses guide.

3. Create a cloud server with Apache Kafka

  1. In the control panel, on the top menu, click Products and select Cloud Servers.

  2. Click Create server.

  3. Fill in the blocks:

  4. Check the cloud server price. Note that after configuration, the price for a three-node cluster will be calculated using the formula: cloud server price * 3.

  5. Click Create.

Name and placement

  1. Enter the server name. It will be set as the hostname in the operating system.

  2. Select a location in which the server will be created. The list of available server configurations and resource costs depends on the location. After the server is created, the location cannot be changed.

Source

  1. Open the Applications tab.

  2. Select Cloud Kafka.

  3. Optional: if you need a different current or archived application version, select it in the Version field.

  4. Fill in the application parameters:

    4.1. Enter the service user name. You can find it in the control panel: in the top menu, click IAM and go to the Service Users section (the section is only available to the Account Owner and users with the iam.admin role).

    4.2. Enter the service user password. You can view it when creating the user or change it to a new one.

    4.3. Enter the project ID. You can copy it in the control panel: in the top menu, click ProductsCloud Servers → open the projects menu → in the project row, click .

    4.4. Specify the pool in which the cloud server will be created, for example, ru-3.

    4.5. Specify the pool segment in which the cloud server will be created, for example, ru-3b.

    4.6. Enter the account number in the control panel. You can find it in the control panel in the top right corner.

Configuration

Select a configuration with at least 2 vCPUs and at least 8 GB RAM if the server is needed for development and testing. If the server is needed for a moderate workload in a production environment, select a configuration with at least 8 vCPUs and at least 32 GB RAM. The boot volume size for the production environment depends on your needs.

For all lines except Shared and Dedicated, two types of server configurations are available:

  • fixed configurations — product line configurations with different technical specifications and fixed resource ratios;
  • custom configurations — configurations in which any resource ratio can be specified.

Configurations use different processors depending on the line and pool segment. You can adjust the selected configuration. After creating the server, you can change the configuration.

  1. Open the tab with the line.

  2. Click Fixed.

  3. Optional: you can adjust the configuration if creating a server in the multi-AZ pool segment ru-6 or pool segments ru-3b, ru-7a, and ru-7b:

    3.1. Expand the block with the configuration settings description.

    3.2. Optional: select the CPU manufacturer. Selecting a manufacturer is not available in all pools.

    3.3. Optional: if you do not want physical processor cores pinned to the cloud server's vCPUs, clear the Dedicated Cores checkbox. For more information, see the instructions in Dedicated Cores.

    3.4. Optional: if you want to disable Hyper-Threading for a server with dedicated cores, clear the Hyper-Threading (SMT).

    3.5. Optional: if you are creating a server with dedicated cores and want to place a multiprocessor server on a single NUMA node, select the Mandatory placement on a single NUMA node checkbox. You can place a server with 4 vCPUs or more on a single NUMA node. If the cloud server's resources cannot be placed on a single node, it will not be created. For more information, see the Placement on a single NUMA node section of the instructions in Dedicated Cores.

  4. Select a configuration.

  5. If both local and network volumes are available in the selected configuration, select the volume to be used as the boot volume:

    • local disk — select the Local SSD NVMe disk checkbox. A server with a local disk can only be created from images and applications;
    • network volume — do not select the Local SSD NVMe disk.

    The amount of RAM allocated to the server may be less than specified in the configuration — the operating system kernel reserves part of the RAM depending on the kernel version and distribution. You can check the allocated amount on the server using the command sudo dmesg | grep Memory.

Volumes

  1. If you did not select the Local SSD NVMe disk checkbox when configuring, the first specified network volume will be used as the server boot volume. To configure it:

    1.1. Select the boot network volume type.

    1.2. Specify the boot network volume size in GB or TB. Mind the network volume limits on the maximum size.

    1.3. If you selected the Universal v2 or Fast SSD v2 volume type, specify the total number of read and write operations in IOPS. After creating the volume, you can change the number of IOPS — decrease or increase it. The number of IOPS modifications is unlimited.

  2. Optional: add an additional server network volume:

    2.1. Click Add.

    2.2. Select the network volume type.

    2.3. Specify the network volume size in GB or TB. Mind the network volume limits on the maximum size.

    2.4. If you selected the Universal v2 or Fast SSD v2 volume type, specify the total number of read and write operations in IOPS. After creating the volume, you can change the number of IOPS — decrease or increase it. The number of IOPS modifications is unlimited.

    After creating the server, you can attach new additional volumes.

Internet

Configure public access to the server.

The cloud server will be added to the private subnet connected to the cloud router with 1:1 NAT and internet access. Internet access to and from the internet will be provided through the cloud router. The server will be accessible from the internet via a public floating IP address.

  1. In the Internet connection field, select the access type Public floating IP address.

  2. Select the public floating IP address that you created in step 2.

Private network

A cloud server can be added to an existing or new private subnet.

  1. In the Subnet field, select a private subnet.

  2. Optional: in the IP address field, change the default IP address.

  3. In the Router field, select an existing router or create a new one.

    If the router is not connected to the internet, it will be automatically connected after the server is created.

Security

Select security groups to filter traffic on the server ports. Without security groups, traffic will be denied. If the block is missing, traffic filtering (port security) is disabled in the server network. With traffic filtering disabled, all traffic will be allowed.

Access

  1. Add an SSH key for the project to the server for secure connection:

    1.1. If the SSH key for the project is not added to the cloud platform, click Add SSH key, enter the key name, paste the public key in OpenSSH format, and click Add.

    1.2. If the SSH key for the project is added to the cloud platform, in the SSH key field, select an existing key. The SSH key is only available in the pool where it is located.

  2. Optional: in the Password for "root":

    2.1. Copy the password for the root user — the user with unrestricted privileges for all system actions.

    2.2. Save the password in a secure place and do not transfer it in plain text.

Additional settings

  1. Optional: if you plan to create multiple servers and want to improve infrastructure fault tolerance, add the server to a placement group:

    1.1. To create a new group, in the Placement group field, click Create.

    1.2. Select New group and enter the group name.

    1.3. Select the placement policy across different hosts:

    • preferred — soft-anti-affinity. The system will try to place servers on different hosts. If there is no suitable host when creating the server, it will be created on the same host;
    • mandatory — anti-affinity. Servers in the group must be located on different hosts. If there is no suitable host when creating the server, the server will not be created.

    1.4. If the group is created, in the Placement group field, select the placement group.

  2. Optional: to add additional information or filter servers in the list, add server tags. OS and configuration tags are added automatically. To add a new tag, in the Tags field, enter the tag.

  3. To add a script that will run using the cloud-init agent during the first boot of the operating system, in the Automation block, in the User data:

    • open the Text tab and paste the script as text;
    • or open the File tab and upload the script file.

View logs

If the temporary cloud server was not deleted, there was an issue during Apache Kafka cluster configuration. For example, the service user does not have sufficient permissions, an incorrect password was entered, or the user data settings contain errors.

  1. Connect to the server that you created earlier.

  2. To view the error log, open the cloud-init-output.log file in the text editor vi:

    vi /var/log/cloud-init-output.log
  3. Depending on the error log, grant access to the service user or change the user data settings.

  4. Recreate the server.

  5. If you cannot resolve the issue on your own, create a ticket and attach the error logs.