你在写java 版的 kafka程序可能会遇到如下问题
问题一:程序抛出了org.apache.kafka.common.errors.TimeoutException:
在application.yml 中加入下面这句话 :logging.level.root:debug
然后再看报错,可以发现下面这个错误
错误:java.io.IOException: Can't resolve address: ubuntu:9092
原来是无法解析ubuntu.
解决办法:到C:\Windows\System32\drivers\etc ,用nopaid++打开hosts文件 加入下面这句话 远程主机的ip ubuntu
如 192.168.23.139 ubuntu
好了开始正题了:
一,你得有个虚拟机,里面跑着ubuntu
二,环境安装,1.装jdk, jdk1.8下载地址 2.环境变量配置
2、解压源码包
通过终端在/usr/local目录下新建java文件夹,命令行:
2、解压源码包
通过终端在/usr/local目录下新建java文件夹,命令行:
sudo mkdir /usr/local/java
然后将下载到压缩包拷贝到java文件夹中,命令行:
进入jdk源码包所在目录
cp jdk-8u25-linux-x64.tar.gz /usr/local/java
然后进入java目录,命令行:
cd /usr/local/java
解压压缩包,命令行:
sudo tar xvf jdk-8u25-linux-x64.tar.gz
然后可以把压缩包删除,命令行:
sudo rm jdk-8u25-linux-x64.tar.gz
3、设置jdk环境变量
这里采用全局设置方法,它是是所有用户的共用的环境变量
$sudo gedit ~/.bashrc
打开之后在末尾添加
export JAVA_HOME=/usr/local/java/jdk1.8.0_25
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
请记住,在上述添加过程中,等号两侧不要加入空格,不然会出现“不是有效的标识符”,因为source /etc/profile 时不能识别多余到空格,会理解为是路径一部分。
然后保存。
4、检验是否安装成功
在终端输入如下命令
java -version
下载kafka下载地址 ,解压文件
tar zxvf 下载得文件位置 -C 要解压得位置 如/Download
1.打开kafka内置得zookeeper
bin/zookeeper-server-start.sh config/zookeeper.properties
2.打开kafka服务
bin/kafka-server-start.sh config/server.properties
3.创建一个topic
bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 3 --topic hello
4.查看我们创建得topic
bin/kafka-topics.sh --list --zookeeper localhost:2181
5.创建一个消费者
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic hello
6创建一个生产者
bin/kafka-console-producer.sh --broker-list localhost:9092 --topic hello
5.查看我们的ip
ifconfig
我的ip是
192.168.23.139
一,创建一个springboot项目
二,修改application.properties 为application.yml
打开pom.xml 文件添加下面依赖
我的springboot parent 如下
这个是要添加的spring-kafka依赖org.springframework.boot spring-boot-starter-parent 2.0.3.RELEASE
org.springframework.kafka spring-kafka 2.1.7.RELEASE
日志文件依赖
org.projectlombok lombok true
打开application.yml文件
spring: kafka: producer: retries: 0 batch-size: 16384 buffer-memory: 33554432 key-serializer: org.apache.kafka.common.serialization.StringSerializer value-serializer: org.apache.kafka.common.serialization.StringSerializer bootstrap-servers: 192.168.23.139:9092 consumer: bootstrap-servers: 192.168.23.139:9092 group-id: foo auto-offset-reset: earliest enable-auto-commit: true key-deserializer: org.apache.kafka.common.serialization.StringDeserializer value-deserializer: org.apache.kafka.common.serialization.StringDeserializer #logging.level.root: debug
创建一个消费者
@Component @Slf4j public class KafkaConsumer { /** * 监听test主题,有消息就读取 * * @param message */ @KafkaListener(topics = {"hello"}) public void consumer(String message) { log.info("c1 消费了hello topic messge:{}", message); } }
再创建一个生产者
@Component @Slf4j public class KafkaSender { @Autowired private KafkaTemplate kafkaTemplate; /** * 发送消息到kafka,主题为test */ public void sendTest(){ kafkaTemplate.send("hello","hello,kafka " + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS"))); } }
application 主程序
@SpringBootApplication @EnableScheduling public class KafkaApplication { @Autowired KafkaSender kafkaSender; @Autowired KafkaConsumer kafkaConsumer; public static void main(String[] args) { SpringApplication.run(KafkaApplication.class, args); } @Scheduled(cron = "0/2 * * * * ? ") public void sendMsg(){ kafkaSender.sendTest(); } }