1.kafka的基本知识
安装及配置
1部署一台zookeeper,.kafak安装之前需要提前配置jdk
2.然后安装解压后,需要找到config,找到server.properties ,vim编辑内容如下
broker.id=0 表示这台服务器的标识,和zookeeper中的myid类似
listeners=PLATNTEXT://:192.168.217.55(本服务器ip):9092(默认端口号,对外)
log.dirs=/user/localkafka/data/kafka-logs //存放日志的地址
zookeeper.connect=172.16.253.35:2181(borker的信息存储是无状态的,而这些信息存到哪里呢?存到zookeeper,与zookeeper建立连接)
3.保存退出
4.进入bin文件夹下 启动服务器 ./kafka-server-start.sh -daemon ../config/server.properties
5.ps -aux| grep server.properties//查看是否启动成功(启动的前提必须安装jdk)
打开连接的zookeeper服务
ls / 后发现多了一个brokers节点
ls /brokers 里面信息【ids,topics,seqid】
ls/brokers/ids 里面信息【0】发现这是我们配置的kafka的broker.id
kafka基本概念
1.创建topic
1.通过Kafka命令向zookeeper中存储一个topic(主题)
2.发送消息
3.消费消息
方式一不会显示之前发送的信息,只有再次发送才能收到
方式二会显示之前发送的信息。
发送消息后消息会被保存到kafka配置文件中自定义日志的文件夹下的topic下的log下
4.单播消息
5.多播消息
6.查看消费组及信息
1. 2.
7.分区
8.kafka集群搭建
副本是为了为主题中的分区创建多个备份,多个副本在Kafka集群的多个broker中,会有一个副本作为Leader,其他是follower.
刨析:一共有三个集群,每个集群中的broker分别是broker-0、broker-1、broker-2
同时又有两个主题topic分别是 partition-0、partiton-1
备份三份的意思是:对应每个主题分别一共有三份主题topic
Partition:0 Leader:2 的意思是:主题partition-0 的三个备份topic中第三个(下标从0开始)为主节点Leader作为Leader的topic负责读写操作,然后将数据同步到另外两个topic节点
Partition:1 Leader:0 的意思是:主题partition-1 的三个备份topic中第一个(下标从0开始)为主节点Leader作为Leader的topic负责读写操作,然后将数据同步到另外两个topic节点
9.集群中发送消费信息**消费组消费信息
1.分区分消费组的集群消费细节
10.kafka客户端-生产者
1.同步异步发送信息
2.生产者的ack配置
props.put(ProducerConfig.ACKS_CONFIG,"1");
自定义ack应答类型:有三种
ack=0 :类似异步,发送信息后不需要任何broker收到消息,就立即返回ack给生产者,最容易丢消息,但效率最高
ack=1(默认):多个副本之间的leader收到信息后,并把消息写入本地log中,才会返回ack给生产者,性能和安全性最均衡。(leader收到消息并写入log中,可能副本还没有收到消息,就立即返回,这样如果leader宕机,会造成消息丢失)
ack=-1/all:里面有默认的配置min.insync.relicas=2(默认为1,推荐配置大于等于2,因为此值代表的是副本和leader收到信息的总数,如果为1.只有leader有信息,如果leader宕机,数据丢失。类似ack=1的情况),此时就需要leader和follower同步完成后,才会返回ack给生产者(此时集群中有2个broker已完成数据接收),这种方式最安全,但性能最差。
3.关于消息发送的缓冲区
kafka客户端-消费者
1.提交
1)提交的内容
2)自动提交
3)手动提交
手动提交又分为两种:手动同步提交和手动异步提交
2. 消费者poll消息
3.消费者的健康状况检查
4.指定分区和偏移量、时间消费
5.新消费组的消费offset规则
11、springboot整合kafka
1.引入依赖
2.编写配置文件
3.编写消息生产者
4.编写消息消费者
注:因为配置的是手动提交所以参数里有ack
12.kafka集群中的controller、rebalance、HW
13、Kafka中优化问题