文档
https://docs.spring.io/spring-kafka/docs/2.2.6.RELEASE/reference/html/#preface
概述
mq就是承受并发的;
初识:https://blog.csdn.net/weixin_43113679/article/details/90247359
Windows10下Kafka就1个目录;
Kafka依赖于zookeeper,Kafka内置zookeeper,我们用自己下载的zookeeper;
Kafka是集群式服务,一个Kafka集群中每个Kafka服务都有一个server.properties,多创建几个该文件,修改broker.id,即Kafka服务id;
启动Kafka
启动Kafka:进入Kafka目录,.inwindowskafka-server-start.bat .configserver.properties
停止Kafka:https://www.cnblogs.com/fanweiwei/p/3755589.html
SpringBoot整合Kafka
添加依赖,见heal项目,注意springBoot、Kafka、Kafka依赖之间版本问题,依赖不写版本则默认最高版本;
配置Kafka:application.yml,要知道该yml文件每个配置项的含义;
启动顺序:启动zookeeper->启动Kafka->启动springBoot;
参考
https://www.cnblogs.com/pursue339/p/10559451.html
https://blog.csdn.net/sinat_32023305/article/details/83860441
https://www.cnblogs.com/alan319/p/8651434.html
https://www.jianshu.com/p/f94bb7a70ab6
https://www.cnblogs.com/telwanggs/p/10863555.html
遇到的问题
问题1:
启动Kafka服务报错或Kafka服务突然断掉,Kafka启动失败:另一个程序正在使用此文件,进程无法访问
这是Windows平台的bug,没办法,只能删日志:https://issues.apache.org/jira/browse/KAFKA-1194
不要慌,看报错信息,若提示日志相关则删除对应的日志即可,
D:kafka_2.13-2.4.0kafka_2.13-2.4.0logs\__consumer_offsets-10,删除报错的路径目录里的文件;
这就导致Kafka中数据被定时删除;
问题2(巨难受):
获取Kafka中某一topic下某一分区里前n条数据,前端按钮触发报错,停掉springboot后main里调用不报错,真奇葩!最后发现不是消费者配置的事,那个监听者也是消费者,这俩消费者在同一个消费者组里,注掉监听者消费者即可!!报重平衡,给了别的消费者,单线程嘛!
问题3(巨难受):
由于Kafka配置文件没有设置可以真正删除topic,所以Kafka tool中删除只是标记为删除,导致Kafka启动失败,所以想办法彻底删除那个topic,进入不了Kafka,就启动zookeeper服务后进入zookeeper-cli,彻底删除那个topic,https://blog.csdn.net/YF_Li123/article/details/101552437,
彻底删除topic:https://www.cnblogs.com/xiaodf/p/10710136.html,https://www.cnblogs.com/musen/p/11475695.html
问题4:
Kafka启动时连接zookeeper超时,超时时间改多点;
一些思考
项目用到的中间件:1.消息引擎:Kafka消息队列;2.搜索引擎:elasticsearch搜索系统;3.Redis
相关工具及使用
Kafka-manager:https://jingyan.baidu.com/article/eb9f7b6d367679869364e8d4.html,https://blog.csdn.net/weixin_30530339/article/details/96768117
笔记
Kafka结构(元数据):
一个Kafka集群里包含多个Kafka实例(服务器),一个Kafka服务器可以有多个topic
Kafka中的消息按topic进行归类,一个topic(话题)中分为若干partition,一个partition是一个有序的队列,partition中的每条消息都有一个id(offset),offset在partition中有序,消息按在partition中的顺序发给消费者,一个topic中的partition之间是没有顺序的;
Kafka中的数据存储文件命名方式:offset.kafka
发送(生产)消息发到指定话题里;
一条消息是(来自)某个话题中的某个partition里的;
topic可以理解为一个队列;
消费者组(CG):一个topic中的消息的广播,CG中的所有消费者都能听到;
为什么要用消息队列中间件服务而不是直接用MySQL,当用户同时发消息时,MySQL insert,众多同时发出的消息谁是下一条记录?
https://blog.csdn.net/wangyuxuan_java/article/details/79633161
总感觉mq多此一举;把Kafka队列内容存进MySQL后,Kafka里的数据就没用了??再查消息时用ES?
mq中有的数据存进MySQL,有的不存进MySQL,像聊天记录这种不存入MySQL;
Kafka数据在Kafka目录中;删除topic某分区下所有数据手动去删除指定分区目录里的全部文件即可;