Java连接CDH6.x Kafka创建Producer

本文详细介绍了如何使用Kafka进行消息传递,包括在pom文件中添加依赖、创建Kafka生产者发送消息到指定topic,以及在集群中创建topic和启动消费者接收消息的过程。同时,深入探讨了Kafka生产者配置参数acks的不同设置及其对消息持久性和性能的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先pom文件中引用如下依赖

<!-- ===========KAFKA=============== -->
		<dependency>
			<groupId>org.apache.kafka</groupId>
			<artifactId>kafka_2.12</artifactId>
			<version>2.2.0</version>
		</dependency>

新建一个KafkaProcedureTest类

package com.sss.demo.Kafka;

import java.util.Properties;

import org.apache.kafka.clients.producer.KafkaProducer;
import org.apache.kafka.clients.producer.ProducerConfig;
import org.apache.kafka.clients.producer.ProducerRecord;
import org.apache.kafka.common.serialization.StringSerializer;

public class KafkaProducerSimple {
    public static void main(String[] args) {
        // Generate total consecutive events starting with ufoId
        long total = Long.parseLong("10");
        long ufoId = Math.round(Math.random() * Integer.MAX_VALUE);

        // Set up client Java properties
        Properties props = new Properties();
        props.setProperty(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG,
                "cdh02:9092,cdh03:9092,cdh01:9092");
        props.setProperty(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG,
                StringSerializer.class.getName());
        props.setProperty(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG,
                StringSerializer.class.getName());
        props.setProperty(ProducerConfig.ACKS_CONFIG, "1");

        try (KafkaProducer<String, String> producer = new KafkaProducer<>(props)) {
            int i = 0;
            while (true){
                try {
                    ProducerRecord<String, String> data = new ProducerRecord<String, String>("testTopic", String.valueOf(i++), "Generate Test : "+String.valueOf(i++));
                    Thread.sleep(1000);
                    producer.send(data);
                    long wait = Math.round(Math.random() * 25);
                    Thread.sleep(wait);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

接着去集群中启动KAFKA并创建testTopic

[root@cdh03 ~]#kafka-topics --create --zookeeper cdh01/kafka cdh02:2181/kafka cdh03:2181/kafka --replication-factor 3 --partitions 3 --topic testTopic

然后再去创建一个消费者

[root@cdh03 ~]#kafka-console-consumer --bootstrap-server cdh01:9092 cdh02:9092 cdh03:9092 --topic testTopic --from-beginning

启动java项目Run起来,你在消费者控制台发现以下输出
在这里插入图片描述

关于配置参数设置

acks=0如果设置为零,则生产者不会等待来自服务器的任何确认。该记录将被立即添加到套接字缓冲区并被视为已发送。在这种情况下,retries不能保证服务器已经收到记录,并且配置不会生效(因为客户端通常不会知道任何故障)。为每个记录返回的偏移量将始终设置为-1。

acks=1这意味着领导者会将记录写入其本地日志中,但会在未等待所有追随者完全确认的情况下作出响应。在这种情况下,如果领导者在承认记录后但在追随者复制之前立即失败,那么记录将会丢失。

acks=all这意味着领导者将等待全套的同步副本确认记录。这保证只要至少有一个同步副本保持活动状态,记录就不会丢失。这是最强有力的保证。这相当于acks = -1设置。

这里有详细的参数说明

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值