Я новичок в экосистеме kafka, и в моем случае я использую производителя Java, но мне не нужно отправлять ключ вместе со значением записи, которое сериализуется Avro. Есть ли способ создать Java Producer, который не будет отправлять ключи, или ключи являются обязательным требованием при отправке сообщений в Kafka?
ProducerRecord имеет несколько конструкторов, один из них не имеет значения для ключа, поэтому указывать его не нужно.
Пример:
Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092");
props.put("acks", "all");
props.put("retries", 0);
props.put("batch.size", 16384);
props.put("linger.ms", 1);
props.put("buffer.memory", 33554432);
props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");
Producer<String, String> producer = new KafkaProducer<>(props);
for(int i = 0; i < 100; i++)
producer.send(new ProducerRecord<>("my-topic", "myValue"));
producer.close();
Если я знаю, что не собираюсь использовать ключи при отправке сообщений, можно ли пропустить конфигурацию сериализатора ключей при создании производителя? Т.е. свойство «key.serializer». Кроме того, есть ли API, в котором мне не нужно указывать тип ключа (поскольку я не собираюсь его использовать)?
Как сказал @gasparms, есть встроенные способы производства без отправки ключа. Большинство людей используют Kafka таким образом, поскольку они просто хотят иметь возможность отправлять поток сообщений без ключа. Использование ключей действительно требуется только в том случае, если вам нужен уплотнение журнала
Вот действительно хорошее объяснение - https://stackoverflow.com/a/29515696/236528
Спасибо. За помощь, я прочитал ответ, а также дал еще несколько комментариев.
Спасибо за быстрый ответ, пытаюсь сделать это сегодня утром :) Похоже, я могу использовать ваш пример, в котором конструктор Producer Record используется без ключа.