基本概念
Broker
处理消息的节点
Producer
消息生产者
Consumer
消息消费者
Topic
给消息归类
Partition
一个topic可以分多个Patition,物理上也是分区的,每个partition内部消息是有序的
ConsumerGroup
每个consumer都属于一个Group 消息可以被不同的Group消费,但是一个Group中只有一个Consumer能消费该消息
核心配置
broker.id
节点的标识
listeners
监听的ip和端口
log.dirs
日志目录
zookeeper.connect
zk链接地址
log.retention.hours
日志存储小时数
kafka是不删除数据的 就是把数据存储在log文件中
所以这个log其实是消息持久化的文件
默认168
启动命令
后台启动
bin/kafka-server-start.sh -daemon config/server.properties
启动之后会在zk上注册元数据信息
注册到zk
创建topic
创建名为topicName 的topic
bin/kafka-topics.sh --create --zookeeper ip:port --replication-factor 1 --partitions 1 --topic topicName
查看下有多少topic
bin/kafka-topics.sh --list --zookeeper ip:port
创建消息
bin/kafka-console-producer.sh --broker-list ip:port --topic topicName
然后直接写消息,回车后就发送了
消费消息
bin/kafka-console-consumer.sh --bootstrap-server ip:port --topic topicName
消费到消费者监听启动之前的消息
添加 --from-beginnig
bin/kafka-console-consumer.sh --bootstrap-server ip:port --from-beginning --topic topicName
消息模式
单播消息
利用Group中只能由一个consumer能消费特点实现
多播消息
利用一个消息可以能被多个Group消费实现
列出所有消费组
为什么能实现单播和多播呢
其实就是偏移量的记录维度是 Group
列出消费偏移量
bin/kafka-consumer-groups.sh --bootstrap-server ip:port --describe --group topicName
偏移量内容
这个偏移量消费者自己维护记录
GROUP : 消费组
Partition :0 分区
CURRENT-OFFSET :当前消费偏移量
LOG-END_OFFSET :消息总量偏移量
LAG : 剩余未消费消息
分区Partition
topic 是逻辑上的概念
Partition是物理上分区文件上
分区挂在topic上
原因:分布存储 提升性能
创建多分区的主题
bin/kafka-topics.sh --create --zookeeper ip:port --replication-factor 1 --partitions 2 --topic topicName
创建2个分区的topicName
分区扩容
只支持扩容不支持缩容
bin/kafka-topics.sh -alter --partitions 3 --zookeeper ip:port --topic topicName
集群
把id改为唯一并且zk的注册地址改成一个就能自动组成集群
具体配置
创建topic
bin/kafka‐topics.sh ‐‐create ‐‐zookeeper ip:prot ‐‐replication‐factor 3 ‐‐partitions 2 ‐‐topic topicName
给topic创建2个分区 每个分区3个副本‐‐replication‐factor 三个副本分散在集群中 有主有从
主节点负责写、如果主节点挂了重新选举
一般分区的主节点一般也会分散在集群中
Java Kafka客户端 key分片
如果指定个分区则使用指定分区
如果没有指定则 计算Hash后根据分区数量取模