Чтобы создать локальный экземпляр Kafka с настройкой авторизации через имя пользователя и пароль с использованием протокола `SASL_SSL` и механизма `SCRAM-SHA-512`, необходимо внести некоторые изменения в ваш файл `compose.yaml`. Вот пример корректной конфигурации:
```yaml
version: '3.7'
services:
kafka:
image: bitnami/kafka:latest
environment:
- KAFKA_CFG_NODE_ID=0
- KAFKA_CFG_PROCESS_ROLES=controller,broker
- KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=0@kafka:9093
- KAFKA_CFG_LISTENERS=SASL_SSL://:9092,CONTROLLER://:9093
- KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CONTROLLER:SASL_PLAINTEXT,SASL_SSL:SASL_SSL
- KAFKA_CFG_ADVERTISED_LISTENERS=SASL_SSL://localhost:9092
- KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER
- KAFKA_CFG_INTER_BROKER_LISTENER_NAME=SASL_SSL
- KAFKA_CFG_SASL_MECHANISM_CONTROLLER_PROTOCOL=SCRAM-SHA-512
- KAFKA_CFG_SASL_MECHANISM_INTER_BROKER_PROTOCOL=SCRAM-SHA-512
- KAFKA_CFG_SASL_ENABLED_MECHANISMS=SCRAM-SHA-512
- KAFKA_CFG_SASL_SCRAM_USERS=user:my_pass
- KAFKA_CFG_LISTENER_SECURITY_PROTOCOL=SASL_SSL
- KAFKA_ENABLE_KRAFT=yes # Убедитесь, что используете KRAFT, если не используете ZooKeeper
- KAFKA_CLIENT_USERS=user
- KAFKA_CLIENT_PASSWORDS=my_pass
- KAFKA_CONTROLLER_USER=user
- KAFKA_CONTROLLER_PASSWORD=my_pass
- KAFKA_INTER_BROKER_USER=user
- KAFKA_INTER_BROKER_PASSWORD=my_pass
ports:
- "9092:9092"
- "9093:9093" # Хотя этот порт не обязательно открывать
volumes:
- kafka_data:/bitnami/kafka
volumes:
kafka_data:
```
### Основные моменты, которые стоит учитывать:
1. **SCRAM Credentials**: Линия `KAFKA_CFG_SASL_SCRAM_USERS=user:my_pass` задает учетные данные для SCRAM, и они должны совпадать с другими переменными среды `KAFKA_CLIENT_USERS` и `KAFKA_CLIENT_PASSWORDS`.
2. **Ports**: Откройте порты, которые вам нужны, включая 9092 для клиента и 9093 для контроллера.
3. **TLS**: Убедитесь, что у вас есть правильные сертификаты, если используете `SASL_SSL`. Здесь требуется настроить TLS, если это необходимо (например, если вы хотите использовать SSL-сертификаты для дополнительной безопасности).
4. **KRAFT**: Параметр `KAFKA_ENABLE_KRAFT=yes` указывает на использование режима KRaft, который является нововведением для Kafka. Убедитесь, что вы используете версию Kafka, которая поддерживает KRaft.
### Запуск
Поднимите сервисы с помощью команды:
```bash
docker-compose up -d
```
После этого вы должны иметь работающий экземпляр Kafka, к которому можно подключаться через SASL с использованием SCRAM-SHA-512. Не забудьте протестировать соединение с помощью клиента Kafka, указав правильные учётные данные для аутентификации.