一、简单说明什么是kafka
Apache kafka是消息中间件的一种,我发现很多人不知道消息中间件是什么,在开始学习之前,我这边就先简单的解释一下什么是消息中间件,只是粗略的讲解,目前kafka已经可以做更多
的事情。
举个例子,生产者消费者,生产者生产鸡蛋,消费者消费鸡蛋,生产者生产一个鸡蛋,消费者就消费一个鸡蛋,假设消费者消费鸡蛋的时候噎住了(系统宕机了),生产者还在生产鸡蛋,那新生产的鸡蛋就丢失了。再比如生产者很强劲(大交易量的情况),生产者1秒钟生产100个鸡蛋,消费者1秒钟只能吃50个鸡蛋,那要不了一会,消费者就吃不消了(消息堵塞,最终导致系统超时),消费者拒绝再吃了,”鸡蛋“又丢失了,这个时候我们放个篮子在它们中间,生产出来的鸡蛋都放到篮子里,消费者去篮子里拿鸡蛋,这样鸡蛋就不会丢失了,都在篮子里,而这个篮子就是”kafka“。
鸡蛋其实就是“数据流”,系统之间的交互都是通过“数据流”来传输的(就是tcp、https什么的),也称为报文,也叫“消息”。
消息队列满了,其实就是篮子满了,”鸡蛋“ 放不下了,那赶紧多放几个篮子,其实就是kafka的扩容。
各位现在知道kafka是干什么的了吧,它就是那个"篮子"。
二、安装和简单操作
1、java环境
java -v
2、下载kafka
https://dlcdn.apache.org/kafka/3.2.0/kafka_2.13-3.2.0.tgz
解压
tar -xf kafka_2.13-3.2.0.tgz
3、启动zookeeper
cd kafka_2.13-3.2.0
nohup ./bin/zookeeper-server-start.sh ./config/zookeeper.properties &
4、修改日志目录
vim server.properties
log.dirs=/opt/apps/kafka_2.11-2.1.1/kafka-logs
5、启动kafka
nohup ./bin/kafka-server-start.sh ./config/server.properties &
6、
创建topic
./bin/kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic topic_sdk_log
./bin/kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic test
显示topic详细
./bin/kafka-topics.sh --describe --bootstrap-server localhost:9092 --topic topic_sdk_log
显示所有topic
./bin/kafka-topics.sh --list --bootstrap-server localhost:9092
删除topic
./bin/kafka-topics.sh --bootstrap-server localhost:9092 --delete --topic test
生产者发送消息
注:每次回车表示触发“发送”操作,回车后可直接使用“Ctrl + c”退出生产者控制台。
[root@localhost kafka_2.13-3.2.0]# ./bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test
>hello kafka
>123456
消费者订阅消息
./bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning
hello kafka
123456
三、遇到的一些问题:
1、zookeeper is not a recognized option
解决:
打开kafka消费者端
这个是0.9之后的打开方式
/usr/java/kafka_2.12-2.2.0/bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning
这个是0.9之前的打开方式
/usr/java/kafka_2.12-2.2.0/bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic test --from-beginning
如果0.9之后使用这个命令打开会报这样的错误
zookeeper is not a recognized option
2、OpenJDK 64-Bit Server VM warning
解决:虚拟机的核心数,调整成两个就可以的。