Kafka Ease: Simplifying Kafka Topic and ACL Management
Tags: python, kafka, automation, programming
Published: 2023-09-22 23:09:15

Kafka is a powerful distributed streaming platform, and managing topics and access control lists (ACLs) is a crucial part of Kafka administration. To make this task easier, I've created a Python library called Kafka Ease. Kafka Ease provides utilities to automate the creation of Kafka topics and ACLs, streamlining the administrative process.


![Automate Topic & ACL Management](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zxaybtu83ciqirlq4alk.png)

## Features

- Create Kafka topics with a specified number of partitions and replication factor.
- Define ACLs (Access Control Lists) for Kafka topics, controlling who can perform various operations on them.

## Getting Started

To install Kafka Ease use the following command:

```sh
pip install kafka-ease
```

### How to Use Kafka Ease

#### File Format

Kafka Ease uses YAML or JSON files for configuration. The configuration file must contain two main sections: `topics` and `acls`. Here's an example:

```yml
topics:
  - name: topic.name
    num_partitions: 1
    replication_factor: 1
    cleanup_policy: delete
    retention_days: 7

acls:
  - resource_type: TOPIC
    resource_name: topic.name
    principal: User:kafka-user
    host: "*"
    operation: READ
    permission_type: ALLOW
    pattern_type: LITERAL
```

#### Topics Configuration

- **name**: Topic name
- **num_partitions**: Number of partitions
- **replication_factor**: Replication factor
- **cleanup_policy**: Cleanup policy (`delete`, `compact`)
- **retention_days**: Delete retention days

#### ACLs Configuration

- **resource_type**: Resource type (`UNKNOWN`, `ANY`, `CLUSTER`, `TOPIC`, `DELEGATION_TOKEN`, `GROUP`, `TRANSACTIONAL_ID`)
- **resource_name**: Resource name
- **principal**: Principal (`User:`, `Group:`)
- **host**: Host (*)
- **operation**: Operation (`ANY`, `ALL`, `READ`, `WRITE`, `CREATE`, `DELETE`, `ALTER`, `DESCRIBE`, `CLUSTER_ACTION`, `DESCRIBE_CONFIGS`, `ALTER_CONFIGS`, `IDEMPOTENT_WRITE`)
- **permission_type**: Permission type (`ANY`, `DENY`, `ALLOW`)
- **pattern_type**: Pattern type (`ANY`, `MATCH`, `LITERAL`, `PREFIXED`)

#### Validating Configuration

To validate your configuration file, use the following command:

```sh
kafka-ease apply -f acl.yaml --only-validate
```

Expected output:

```sh
Validating file acl.yaml...
File: acl.yaml
YAML file detected
2 topics found.
2 ACLs found.
File acl.yaml is valid.
```

#### Applying Configuration

To apply your configuration to Kafka, use a command like this:

```sh
kafka-ease apply -f acl.yaml \
  --kafka-brokers kafka:9093 \
  --security-protocol SASL_PLAINTEXT \
  --sasl-mechanism SCRAM-SHA-256 \
  --sasl-username kafka-admin \
  --sasl-password SECRET
```

Expected output:

```sh
Applying file...
Kafka brokers: kafka:9093
Security protocol: SASL_PLAINTEXT
SASL mechanism: SCRAM-SHA-256
SASL username: kafka-admin
SASL password: ***************
File: acl.yaml
YAML file detected
1 topics found.
1 ACLs found.
Topic topic.name updated
Removing old ACLs 3
ACL User:kafka-user synced
File synced successfully.
```

## More Information

For more details and options, check out the [documentation](https://rdomenzain.github.io/kafka-ease/).

## Conclusions

In conclusion, Kafka Ease is a valuable Python library that simplifies Kafka topic and ACL management. With its features for creating and configuring topics and access control lists, it significantly streamlines administrative tasks for Kafka administrators. This tool can be seamlessly integrated into your CI/CD (Continuous Integration/Continuous Deployment) pipeline to enhance the Kafka configuration deployment process.

By incorporating Kafka Ease into your CI/CD pipeline, you can achieve the following benefits:

- **Automation:** Kafka Ease automates the creation and management of Kafka topics and ACLs, reducing the manual effort required for these tasks.
- **Consistency:** CI/CD pipelines ensure that Kafka configurations are consistently applied across different environments, reducing the risk of configuration errors.
- **Version Control:** With Kafka Ease configuration files under version control, changes to Kafka configurations can be tracked and reviewed, enhancing collaboration among team members.
- **Testing:** Before applying configurations to production Kafka clusters, you can thoroughly test them in staging or testing environments, ensuring the configurations work as expected.
- **Security:** Kafka Ease supports security protocols like SASL, allowing you to securely manage Kafka configurations in your CI/CD pipeline.

By integrating Kafka Ease into your CI/CD workflow, you can achieve a more efficient and controlled process for managing Kafka topics and ACLs across your Kafka clusters, ultimately enhancing the reliability and security of your Kafka infrastructure.

GitHub Repository: [Kafka Ease on GitHub](https://github.com/rdomenzain/kafka-ease)

Happy Kafkaing! 🚀