тема журнала изменений в потоках Kafka - установка или изменение разделов

У нас есть приложение потокового процессора, которое потребляет данные из темы с n разделами (n ›1).

С самого начала (без темы журнала изменений) среда разработки всегда создает тему журнала изменений с n разделами .

В том же сценарии на производстве количество разделов всегда равно 1, тогда мы вручную изменили значение на n, чтобы оно соответствовало количеству разделов в теме.

Я проверяю все документы, пытаюсь установить количество разделов для журнала изменений, но я не мог найти способ сделать это. Мой последний вариант - проверить, не существует ли тема журнала изменений, и я создаю ее с n разделами.

Поскольку фреймворк создает эту тему автоматически, есть ли способ установить количество разделов для журнала изменений, не создавая эту тему вручную или в коде?

PS: Мы используем клиент Kafka версии 2.3.1.

Спасибо,

Остин


person AustinTX    schedule 10.07.2020    source источник


Ответы (2)


Я только что просмотрел исходный код, чтобы узнать подробности об этой функции, и на момент написания этой статьи оказалось, что установка разделов change-logs темы не разрешена < / em>.

Объяснение

Тема change-logs классифицируется как внутренняя, и этому есть свидетельства в следующих 2 классах (InternalTopicConfig и InternalTopicManager):

  1. Исходный код класса InternalTopicConfig содержит следующий метод, который также сообщает, что количество разделов по таким внутренним темам принудительно выполняется:

    public void setNumberOfPartitions(final int numberOfPartitions) {
    if (hasEnforcedNumberOfPartitions()) {
        throw new UnsupportedOperationException("number of partitions are enforced on topic " +
                                                "" + name() + " and can't be altered.");
    ...
    
  2. Встроенная документация в исходный код класса InternalTopicManager четко заявляет об этом для makeReady() метода.

    /**
    * Prepares a set of given internal topics.
    *
    * If a topic does not exist creates a new topic.
    * If a topic with the correct number of partitions exists ignores it.
    * If a topic exists already but has different number of partitions we fail and throw exception requesting user to reset the app before restarting again.
    * @return the set of topics which had to be newly created
    */
    public Set<String> makeReady(final Map<String, InternalTopicConfig> topics) 
    ...
    

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

Надеюсь это поможет!

person Lalit    schedule 11.07.2020
comment
Правда? мы успешно создали тему журнала изменений вручную (applicationId-stateStoreName-changelog) и назначили правильное количество разделов для решения проблемы, которая у нас есть на рабочем сервере. - person AustinTX; 13.07.2020
comment
Ох, ладно. Не могли бы вы проверить, действительно ли он использует это так, как вы ожидаете? Потому что, согласно коду, эту тему следует игнорировать, иначе вы должны получить сообщение об ошибке - если я не смотрю более старую версию, и эта функция не была изменена. - person Lalit; 13.07.2020
comment
Да, если мы позволим приложению создать журнал изменений, тогда количество разделов = 1, тогда все потребители будут разбиты. Затем мы вручную меняем разделы на целевой номер, и все работает. - person AustinTX; 13.07.2020
comment
Это интересно, потому что это полностью отличается от того, что было описано в исходном коде. - person Lalit; 16.07.2020

В настоящее время мы подключаемся к темам MSK с поддержкой SSL, и поэтому у нас нет доступа на запись для создания внутренних тем через приложение. Поэтому в качестве обходного пути мы попросили администраторов MSK вручную создать темы журнала изменений с желаемым именем, чтобы приложение могло их прочитать.

Более того, в настоящее время все наши пользовательские темы состоят из 3 разделов, а созданные темы журнала изменений также имеют 3 раздела с обновленными настройками ниже. Эти настройки пригодятся на тот случай, если вы пытаетесь создать тему журнала изменений вручную (для экономии места включено уплотнение):

Конфигурации для журнала изменений

Более того, имена тем журнала изменений будут выглядеть так: (your-application-id) - (userDefined property under materializedAs) -changelog

person DEEPAK R.L.    schedule 05.11.2020