ksqldb, реестр схем настройки проблем

#apache-kafka #confluent-schema-registry #ksqldb

Вопрос:

Я установил в ksqldb-сервере в файле /etc/ksqldb/ksql-server.properties, мой реестр схем, как говорится в документации :

 ksql.schema.registry.url=http://myipaddress:8090
 

но когда я захожу в свой контейнер ksqldb :

 docker exec -it ksqldb-cli ksql http://ksqldb-server:8088
 

и я пытаюсь убежать :

 CREATE STREAM tracking WITH (KAFKA_TOPIC='tracking', VALUE_FORMAT='AVRO');
 

Я получаю ошибку:

 Cannot create topic 'tracking' with format AVRO without configuring 'ksql.schema.registry.url'
 

Я также попытался настроить его следующим образом, даже если это не рекомендуется :

 SET 'ksql.schema.registry.url'='http://myipaddress:8090';
 

но все равно получаю ту же ошибку, не знаю, что я делаю не так.

это мой файл docker-compose:

 version: "3.3"
services:

  # Kafka/Zookeeper container
  divolte-kafka:
    image: krisgeus/docker-kafka
    restart: always
    environment:
      ADVERTISED_HOST: divolte-kafka
      LOG_RETENTION_HOURS: 1
      AUTO_CREATE_TOPICS: "false"
      KAFKA_CREATE_TOPICS: tracking:4:1
      ADVERTISED_LISTENERS: PLAINTEXT://divolte-kafka:9092,INTERNAL://localhost:9093
      LISTENERS: PLAINTEXT://0.0.0.0:9092,INTERNAL://0.0.0.0:9093
      SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,INTERNAL:PLAINTEXT
      INTER_BROKER: INTERNAL

  # Schema Registry
  schema-registry:
    image: confluentinc/cp-schema-registry:5.5.3
    restart: always
    depends_on:
      - divolte-kafka
    ports:
      - 8090:8081
    environment:
      SCHEMA_REGISTRY_HOST_NAME: schema-registry
      SCHEMA_REGISTRY_KAFKASTORE_CONNECTION_URL: divolte-kafka:2181

  # ksql server
  ksqldb-server:
    image: confluentinc/ksqldb-server:0.20.0
    restart: always
    hostname: ksqldb-server
    container_name: ksqldb-server
    depends_on:
      - divolte-kafka
    ports:
      - "8088:8088"
    environment:
      KSQL_LISTENERS: http://0.0.0.0:8088
      KSQL_BOOTSTRAP_SERVERS: divolte-kafka:9092
      KSQL_KSQL_LOGGING_PROCESSING_STREAM_AUTO_CREATE: "true"
      KSQL_KSQL_LOGGING_PROCESSING_TOPIC_AUTO_CREATE: "true"

  # ksql cli
  ksqldb-cli:
    image: confluentinc/ksqldb-cli:0.20.0
    restart: always
    container_name: ksqldb-cli
    depends_on:
      - divolte-kafka
      - ksqldb-server
    entrypoint: /bin/sh
    tty: true
 

Ответ №1:

Я установил ksqldb-сервер в файле /etc/ksqldb/ksql-server.properties

Ну, вы никогда не используете этот файл внутри Docker

Вам нужно добавить переменную для этого

 KSQL_KSQL_SCHEMA_REGISTRY_URL:  "schema-registry:8081"
 

Кроме того, вы должны использовать Кафку в реестре, а не в устаревшем Zookeeper, со свойством KSQL_KAFKASTORE_BOOTSTRAP_SERVERS