架构
broker为Kafka集群的一个节点
topic是逻辑上的概念,partition是物理上的存储,相当于分表
Consumer Group指定消费者的分组,
介绍
修改配置
进入到config目录下修改server.properties
broker.id
listeners=PLAINTEXT://192.168.1.1:9092
zookeeper.connect
启动
进入bin目录
daemon(守护进程)
sh kafka-server-start.sh -daemon ../config/server.properties
zookeeper上注册的节点信息
controller 控制节点
brokers kafaka集群的broker信息
consumer ids/owners/offsets
基本操作
kafka实现细节
消息
消息有key[可选],value;消息批量发送
topic&partition
topic相当于一类消息的集合,partition相当于按照hash规则,将topic放到多个partition中
topic是逻辑概念
partition是物理概念
kafka高吞吐量的因素
- 顺序写的方式存储数据
- 批量发送 batch.size/linger.ms
- 零拷贝 FileChannel.transferTo
日志策略
日志保留策略&日志压缩
消息可靠性机制
消息发送可靠性
生产者发送消息到broker,有三种确认方式
acks = 0 : producer不会等待broker(leader)发送ack
acks = 1 : 当leader接收到消息之后发送ack,丢失重发,丢的概率很小
acks = -1 : 当所有follower都同步消息成功后发送ack,丢失消息可能性比较低
消息存储可靠性
Partition的规则
消息确认的几种方式
自动提交
properties.put(ConsumerConfig.ENABLE_AUTO_FONFIG, "true");
properties.put(ConsumerConfig.AUTO_COMMIT_INTERVAL_MS_CONFIG, "1000");
手动提交
手动同步提交
手动异步提交
指定消费某个分区的消息
Kafaka的分区分配策略
为了提高消费速率,启动多个消费者去消费
同一个分区只能由同一个消费组内的consumer来消费
同一个consumer grop内的consumer应该怎么去分配消费哪个分区里的数据
两种分区策略
partition.assignment.strategy
consumer的rebalance
当一个consumer group新增了消费者
当订阅的主题新增了分区(分区数量发生变化)
消费者主动取消订阅某个主题
某个分区或者某个broker crash
Range 策略 (默认)
0 1 2 3 4 5 6 7 8 9 (10个分区)
c0 c1 c2 (3个消费者)
c0[0,3] 消费0到3
c1[4,6] 消费4到6
c2[7,9] 消费7到9
10(partition num) / 3 (consumer num) = 3
roundrobin 策略
0 1 2 3 4 5 6 7 8 9(10个分区)
c0[0,3,6,9] (3个消费者)
c1[1,4,7]
c2[2,5,8]
命令行
创建topic
–zookeeper 后面是zookeeper的地址
sh kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic myTopic
查看所有的topic
–zookeeper 后面是zookeeper的地址
sh kafka-topics.sh --list --zookeeper localhost:2181
发送消息
–broker-list后面是一个kafka的集群,topic名称为myTopic
sh kafka-console-producer.sh --broker-list localhost:9092 --topic myTopic
–partitions 是分区的数量
假如partitions为3,broker为3,则在3台机器上分别有
格式为topic-分区
机器1 myTopic-0
机器2 myTopic-1
机器3 myTopic-2
假如partitions为4,broker为3,则在3台机器上分别有
机器1 myTopic-0,myTopic-3
机器2 myTopic-1
机器3 myTopic-2
–replication-factor 是副本数
假如partitions为3,broker为3,replication-factor为2,则在3台机器上分别有
机器1 myTopic-0,myTopic-2
机器2 myTopic-0,myTopic-1
机器3 myTopic-1,myTopic-2
副本之间有leader和follower的角色
涉及到的问题有leader选举,副本同步