changelog topi c в потоках Kafka - установка или изменение разделов - PullRequest
0 голосов
/ 10 июля 2020

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

Начиная с fre sh start (без журнала изменений topi c) среда разработки всегда создает журнал изменений topi c с n разделами.

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

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

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

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

Спасибо,

Austin

1 Ответ

0 голосов
/ 11 июля 2020

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

Объяснение

change-logs topi c классифицируется как внутренний topi c, и этому есть доказательства в следующих 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) 
    ...
    

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

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

...