[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-kafka-kak-vyglyadit-primer-konfiguratsii-kafka-producer":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":15,"progress":16,"seo":17},802,"kak-vyglyadit-primer-konfiguratsii-kafka-producer",21,"kafka","Kafka","📨","Как выглядит пример конфигурации Kafka Producer?","Рассмотрим три подхода к созданию продюсера: нативный Kafka API, Spring Kafka и Spring Cloud Stream.\n\n### Нативный Kafka Producer\n\n\u003Cdetails>\u003Csummary>Пример кода\u003C\u002Fsummary>\n\n```java\nimport org.apache.kafka.clients.producer.KafkaProducer;\nimport org.apache.kafka.clients.producer.ProducerRecord;\nimport java.util.Properties;\n\npublic class KafkaStringArrayProducer {\n\n    public static void main(String[] args) {\n        Properties props = new Properties();\n        props.put(\"bootstrap.servers\", \"localhost:9092\");\n        props.put(\"key.serializer\", \"org.apache.kafka.common.serialization.StringSerializer\");\n        props.put(\"value.serializer\", \"org.apache.kafka.common.serialization.StringSerializer\");\n\n        KafkaProducer\u003CString, String[]> producer = new KafkaProducer\u003C>(props);\n\n        String key = \"user123\";\n        String[] value = {\"message1\", \"message2\", \"message3\"};\n\n        ProducerRecord\u003CString, String> record = new ProducerRecord\u003C>(\"my_topic\", key, value);\n        record.headers().add(\"traceId\", \"someTraceId\");\n\n        producer.send(record, (metadata, exception) -> {\n            if (exception != null) {\n                System.out.println(\"Ошибка при отправке: \" + exception.getMessage());\n            } else {\n                System.out.println(\"Отправлено в \" + metadata.topic() + \" партиция \" + metadata.partition());\n            }\n        });\n\n        producer.close();\n    }\n}\n```\n\n```properties\nacks=all\nretries=3\ncompression.type=gzip\n```\n\n\u003C\u002Fdetails>\n\n### С использованием Spring Kafka\n\n\u003Cdetails>\u003Csummary>Конфигурация и сервис\u003C\u002Fsummary>\n\n```java\n@EnableKafka\n@Configuration\npublic class KafkaProducerConfig {\n\n    @Autowired\n    private KafkaProperties kafkaProperties;\n\n    @Bean\n    public Map\u003CString, Object> producerConfigs() {\n        Map\u003CString, Object> props = new HashMap\u003C>();\n        props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, kafkaProperties.getServer());\n        props.put(ProducerConfig.CLIENT_ID_CONFIG, kafkaProperties.getProducerId());\n        props.put(\n                ProducerConfig.INTERCEPTOR_CLASSES_CONFIG,\n                \"com.example.configuration.kafka.KafkaProducerLoggingInterceptor\"\n        );\n\n        if (\"SASL_SSL\".equals(kafkaProperties.getSecurityProtocol())) {\n            props.put(\"ssl.truststore.location\", kafkaProperties.getSslTrustStoreLocation());\n            props.put(\"ssl.truststore.password\", kafkaProperties.getSslTrustStorePassword());\n            props.put(\"ssl.truststore.type\", kafkaProperties.getSslTrustStoreType());\n            props.put(\"ssl.keystore.type\", kafkaProperties.getSslKeyStoreType());\n\n            props.put(\"sasl.mechanism\", kafkaProperties.getSaslMechanism());\n            props.put(\"security.protocol\", kafkaProperties.getSecurityProtocol());\n            props.put(\"sasl.jaas.config\", kafkaProperties.getJaasConfigCompiled());\n        }\n\n        return props;\n    }\n\n    @Bean\n    public ProducerFactory\u003CString, String> producerFactory() {\n        var stringSerializerKey = new StringSerializer();\n        stringSerializerKey.configure(Map.of(\"key.serializer.encoding\", \"UTF-8\"), true);\n        stringSerializerKey.configure(Map.of(\"serializer.encoding\", \"UTF-8\"), true);\n\n        var stringSerializerValue = new StringSerializer();\n        stringSerializerValue.configure(Map.of(\"value.serializer.encoding\", \"UTF-8\"), false);\n        stringSerializerValue.configure(Map.of(\"serializer.encoding\", \"UTF-8\"), false);\n\n        return new DefaultKafkaProducerFactory\u003C>(producerConfigs(), stringSerializerKey, stringSerializerValue);\n    }\n\n    @Bean\n    public KafkaTemplate\u003CString, String> kafkaTemplate() {\n        return new KafkaTemplate\u003C>(producerFactory());\n    }\n}\n```\n\n```java\n@Service\npublic class KafkaProducerService {\n\n    private final KafkaTemplate\u003CString, String> kafkaTemplate;\n\n    public KafkaProducerService(KafkaTemplate\u003CString, String> kafkaTemplate) {\n        this.kafkaTemplate = kafkaTemplate;\n    }\n\n    public void sendMessage(String message, String key, String topic) {\n      try {\n        log.info(\"Sending message {}\", data);\n        kafkaTemplate.send(topic, key, message);\n        log.info(\"Successfully send message {}\", data);\n      } catch (Exception ex) {\n        log.error(\"Failed send message to {} topic by key {}\", key, topic);\n        throw ex;\n      }\n    }\n}\n```\n\n```java\n@RestController\n@RequestMapping(\"\u002Fkafka\")\npublic class KafkaController {\n\n    @Autowired\n    private KafkaProducerService kafkaProducerService;\n\n    @PostMapping(\"\u002Fsend\")\n    public String sendMessage(@RequestParam String message, @RequestParam String key, @RequestParam String topic) {\n        kafkaProducerService.sendMessage(message, key, topic);\n        return \"Message sent to Kafka!\";\n    }\n}\n```\n\n\u003C\u002Fdetails>\n\n### С использованием Spring Cloud Stream\n\n\u003Cdetails>\u003Csummary>Конфигурация и сервис\u003C\u002Fsummary>\n\n```yaml\nspring:\n  cloud:\n    stream:\n      bindings:\n        output:\n          destination: my_topic\n      kafka:\n        binder:\n          brokers: localhost:9092\n```\n\n```java\n@Service\n@EnableBinding(Source.class)\npublic class KafkaStreamProducer {\n\n    private final Source source;\n\n    public KafkaStreamProducer(Source source) {\n        this.source = source;\n    }\n\n    public void sendMessage(String message) {\n        Message\u003CString> msg = MessageBuilder.withPayload(message).build();\n        source.output().send(msg);\n    }\n}\n```\n\n```java\n@RestController\n@RequestMapping(\"\u002Fkafka-stream\")\npublic class KafkaStreamController {\n\n    @Autowired\n    private KafkaStreamProducer kafkaStreamProducer;\n\n    @PostMapping(\"\u002Fsend\")\n    public String sendMessage(@RequestParam String message) {\n        kafkaStreamProducer.sendMessage(message);\n        return \"Message sent to Kafka via Spring Cloud Stream!\";\n    }\n}\n```\n\n\u003C\u002Fdetails>\n\n> **На собеседовании:** если вас спрашивают про конфигурацию продюсера, покажите, что знаете как минимум нативный подход и Spring Kafka. Spring Cloud Stream — бонус, который демонстрирует понимание абстракций.","","middle",[7],[],null,{"title":18,"description":19,"ogTitle":18,"ogDescription":19,"keywords":20,"schemaAnswer":19,"featuredSnippetReady":21},"Как выглядит пример конфигурации Kafka Producer? — Gymterview","Рассмотрим три подхода к созданию продюсера: нативный Kafka API, Spring Kafka и Spring Cloud Stream.",[7,13],true]