基于JAVA API方式使用Kafka——编写生产者客户端

基于JAVA API方式使用Kafka

编写生产者客户端

【有问题或错误,请私信我将及时改正;借鉴文章标明出处,谢谢】

1.导入依赖:

<repositories>
    <repository>
        <id>nexus-aliyun</id>
        <name>nexus-aliyun</name>
        <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
        <releases>
            <enabled>true</enabled>
        </releases>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </repository>
</repositories>
<dependencies>
    <dependency>
        <groupId>org.apache.kafka</groupId>
        <artifactId>kafka-clients</artifactId>
        <version>0.10.2.1</version>
    </dependency>
    <dependency>
        <groupId>org.apache.kafka</groupId>
        <artifactId>kafka_2.11</artifactId>
        <version>0.10.2.1</version>
    </dependency>
    <dependency>
        <groupId>org.apache.kafka</groupId>
        <artifactId>kafka-streams</artifactId>
        <version>0.10.2.1</version>
    </dependency>
</dependencies>

2.idea创建java类,类名为KafkaProducerTest

import org.apache.kafka.clients.producer.KafkaProducer;
import org.apache.kafka.clients.producer.ProducerRecord;
import java.util.Properties;
public class KafkaProducerTest {
    public static void main(String[] args) {
        Properties props=new Properties();
        //1.指定Kafaka集群的ip地址和端口号
        props.put("bootstrap.servers","master:9092");
        //2.等待所有副本节点的应答
        props.put("acks","all");
        //3.消息发送最大尝试次数
        props.put("retries",0);
        //4.指定一批消息处理次数
        props.put("batch.size",16384);
        //5.指定请求延时
        props.put("linger.ms",1);
        //6.指定缓存区内存大小
        props.put("buffer.memory",33554432);
        //7.设置key序列化
        props.put("key.serializer","org.apache.kafka.common.serialization.StringSerializer");
        //8.设置value序列化
        props.put("value.serializer","org.apache.kafka.common.serialization.StringSerializer");
        // 9、生产数据
        KafkaProducer<String, String> producer = new KafkaProducer<String, String>(props);
        for (int i = 0; i < 50; i++) {
            producer.send(new ProducerRecord<String, String>("first", Integer.toString(i), "ycf vs yy" + i));
        }
        producer.close();
    }
}

3.开启zookeeper集群
4.开启kafka集群

第三步第四步骤不会看我博客:kafka命令操作(详细)

5.进入kafka目录下开启消费者

bin/kafka-console-consumer.sh  --bootstrap-server master:9092 --topic first

这里需要注意,idea充当生产者生产数据,开启消费者接受数据

idea中指定topic为first,所以kafka上运行命令topic也指定为first
idea中指定Kafaka集群的ip地址和端口号为:master:9092,所以kafka上运行也得指定为master:9092,不过代码可以在master,slave1,slave2三台节点的任意一台输入消费者命令接收数据。

在这里插入图片描述

6.运行成功之前出的错误总结
大问题一:

如果运行代码有报错
报错1:java代码错误
报错2:lambdas错误

此时将idea中配置如下几个图一样的配置,java版本必须是同一个版本,lambdas也得选择这样就不会报以上两个错误了

如下几个图修改idea配置:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

这里修改完配置运行代码还可以,不知道为什么idea每次都需要设置setting和project structure,这个小问题没有解决,不过不影响运行代码。

大问题二:

kafka利用idea为生产者输入数据,虚拟机master节点为消费者输出数据时,出现一个警告,一个错误,如下图:

在这里插入图片描述
在这里插入图片描述

(1)错误的解决方法:
在C:\Windows\System32\drivers\etc\hosts,将hosts文本文件添加你的节点

在这里插入图片描述

(2)警告解决:

警告参考1:关于log4j
警告参考2:log4j问题解决
我的解决方法:

在idea项目下src下的main下的resource文件夹下添加名为log4j.properties的文本文件。

在这里插入图片描述

内容添加如下:

# Global logging configuration 这个配置是调试用的配置,生产环境要改成INFO或更高级别
log4j.rootLogger=DEBUG, stdout
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern= %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n

这样再运行就不会有警告了,如下图:

在这里插入图片描述

【有问题或错误,请私信我将及时改正;借鉴文章标明出处,谢谢】

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fy_1852003327

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值