Производитель Kafka с разделением по умолчанию - PullRequest
0 голосов
/ 28 августа 2018

Прямо сейчас мой производитель kafka отправляет все сообщения в один раздел темы kafka, который на самом деле имеет более 1 раздела.

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

Фрагмент кода моего производителя кафки:

Properties props = new Properties();
props.put(ProducerConfig.RETRIES_CONFIG, 0);
props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG,bootstrap.servers);
props.put(ProducerConfig.ACKS_CONFIG, "all");

Я использую Flink Kafka Producer для приема сообщений по теме Kafka.

speStream.addSink(
    new FlinkKafkaProducer011(kafkaTopicName,
    new KeyedSerializationSchemaWrapper<>(new SimpleStringSchema()), 
    props, 
    FlinkKafkaProducer011.Semantic.EXACTLY_ONCE)

Ответы [ 2 ]

0 голосов
/ 28 августа 2018

Решил это, изменив flinkproducer на

speStream.addSink (новый FlinkKafkaProducer011 (kafkaTopicName, новый SimpleStringSchema (), реквизит));

0 голосов
/ 28 августа 2018

При использовании разделителя по умолчанию сообщениям назначается раздел с использованием следующей логики:

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

  • сообщения без ключей: циклический перебор используется для назначения разделов

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

...