Nano Hash - криптовалюты, майнинг, программирование

Kafka Consumer - назначай и ищи

Я не мог понять этот дизайн API!

В приведенном ниже коде мы подписываемся на список тем с динамически назначаемым разделом. Это совершенно нормально.

    KafkaConsumer<String, String> consumer = new KafkaConsumer<String, String>(properties);
    consumer.subscribe(Arrays.asList("some-topic"));

    while(true){

        ConsumerRecords<String, String> records = consumer.poll(Duration.ofMillis(100));
        StreamSupport.stream(records.spliterator(), false)
                    .forEach(r -> {
                        System.out.println(r.key() + "::" + r.value());
                    });


    }

Путаница здесь.

    KafkaConsumer<String, String> consumer = new KafkaConsumer<String, String>(properties);
    //seek for specific partition
    TopicPartition partition = new TopicPartition("some-topic", 0);
    consumer.assign(Arrays.asList(partition));
    consumer.seek(partition, 0);

    while(true){

        ConsumerRecords<String, String> records = consumer.poll(Duration.ofMillis(100));
        StreamSupport.stream(records.spliterator(), false)
                .forEach(r -> {
                    System.out.println(r.key() + "::" + r.value());
                });


    }

Вопрос:

  1. Мы уже присвоили список разделов с помощью метода assign. Почему метод seek также ищет информацию о разделе? Почему-то мне кажется, что это избыточно.
  2. Метод seek имеет раздел с темой и смещением. Почему для вызова seek сначала требуется assign?

Ответы:


1

1 - сначала имейте в виду, что ваш потребитель может быть назначен многим различным темам / разделам через API kafka. Затем у поиска и назначения есть две разные независимые обязанности, поэтому вы можете подумать, что это избыточно, но всякий раз, когда вам нужно вернуться к смещению или по какой-либо причине вам нужно повторить смещение, вы будете использовать поиск, и для этого , seek() нужна информация о теме и разделе, либо вы использовали статическое назначение (назначить), либо динамическое (подписка).

Вы не можете просто использовать seek() без указания темы/раздела, во многих случаях это было бы неоднозначно.

2 - Вы уверены, что вам нужно сделать assign перед вызовом seek()? Я знаю, что оба можно использовать перед вызовом poll().., но не знал, что assign является обязательным перед seek().., у вас есть сообщение об ошибке (в любом случае я могу проверить завтра и отредактировать этот пост)

Янник

28.07.2019
  • 1) Это могло быть consumer.seek(offset). зачем еще и раздел? по крайней мере, это нормально 2) назначение обязательно - java.lang.IllegalStateException: No current assignment for partition <topic> - не имеет смысла! 28.07.2019
  • Это не может быть поиск (смещение) только потому, что как узнать, для какой темы или раздела вы хотите изменить свое смещение? Ваш потребитель может быть привязан к нескольким темам/разделам. Что касается того, почему вызов assign() раньше, я думаю, это потому, что вам нужно, чтобы кластер Kafka знал, к какой теме/разделу вы привязаны, чтобы, например, поддерживать внутреннее состояние ваших Consumer_offsets 28.07.2019
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

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

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..