Kafka

文档

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.htmlhttps://www.cnblogs.com/musen/p/11475695.html

问题4:

Kafka启动时连接zookeeper超时,超时时间改多点;

一些思考

项目用到的中间件:1.消息引擎:Kafka消息队列;2.搜索引擎:elasticsearch搜索系统;3.Redis

相关工具及使用

Kafka-manager:https://jingyan.baidu.com/article/eb9f7b6d367679869364e8d4.htmlhttps://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某分区下所有数据手动去删除指定分区目录里的全部文件即可;

原文地址:https://www.cnblogs.com/yyjh/p/12178291.html