Настройте state.dir для хранения данных государственного хранилища в другом каталоге

#apache-kafka #apache-kafka-streams

#apache-кафка #apache-kafka-streams #apache-kafka

Вопрос:

Я пытаюсь настроить свою топологию, чтобы изменить каталог по умолчанию, в котором хранятся хранилища состояния.

Я прочитал из документов, что свойство state.dir — это то, что мне нужно изменить.

Значение по умолчанию равно /tmp/kafka-streams , и я хочу изменить это на /opt/kafka-streams , потому что в нашей производственной системе наш /tmp каталог периодически очищается.

Мое приложение имеет только одну топологию, и я установил для свойства state.dir значение /opt/kafka-streams .

В журналах я вижу, что сначала печатается следующее, что подтверждает, что /opt/kafka-streams используется:

    | loglevel="INFO"  |  thread="main"  |  logger="org.apache.kafka.streams.StreamsConfig  "  StreamsConfig values: 
    application.id = my-application
    application.server = 
    bootstrap.servers = [192.168.92.118:9092]
    buffered.records.per.partition = 1000
    cache.max.bytes.buffering = 10485760
    client.id = my-application-client
    commit.interval.ms = 30000
    connections.max.idle.ms = 540000
      ...
      ...
      ...
    state.dir = /opt/kafka-streams
  

Но потом … вскоре после приведенного выше журнала ниже печатается другая строка журнала, которая показывает, /tmp/kafka-streams что все еще где-то используется:

    | loglevel="INFO"  |  thread="main"  |  logger="org.apache.kafka.streams.StreamsConfig  "  StreamsConfig values: 
    application.id = my-application
    application.server = 
    bootstrap.servers = [192.168.92.118:9092]
    buffered.records.per.partition = 1000
    cache.max.bytes.buffering = 10485760
    client.id = my-application-client-StreamThread-1-consumer
      ...
      ...
      ...
    state.dir = /tmp/kafka-streams
  

Мое приложение имеет только 1 топологию. Он использует processor api. Один процессор добавляет данные в хранилище состояния. Затем есть разделитель, который периодически считывает данные из хранилища состояния и выводит сообщения по теме вывода.

При построении своей топологии я использовал application.id=my-application и client.id=my-application-client . Но во 2-й строке журнала выше я вижу, client.id=my-application-client-StreamThread-1-consumer и вот где state.dir=/tmp/kafka-streams .

Есть ли другое место, где мне нужно настроить state.dir при построении моей топологии?

Комментарии:

1. Не могли бы вы добавить все начальные журналы и конфигурацию?

2. Какую версию вы используете? Потоки Kafka, используемые для регистрации «недопустимой» конфигурации, что исправлено с тех пор 2.1 : github.com/apache/kafka/commit /…