-
Notifications
You must be signed in to change notification settings - Fork 0
Description
分布式消息通信kafka
应用场景
- 异步消息
- 异步解耦
kafka特点
- 高性能
- 高吞吐量
集群部署
-
tar -zxcf 解压安装包
-
config目录修改server.properties配置
broker.id
listeners=PLAINTEXT://host:9092
zookeeper.connect=zookeeper集群链表
-
启动kafka:sh kafka-server-start.sh -daemon ../config/server.properties
-
停止kafka sh kafka-server-stop.sh
-
启动后zookeeper集群上的节点
[cluster, controller, brokers, zookeeper, auth, subscribe, ip, admin, isr_change_notification, controller_epoch, digest, consumers, latest_producer_id_block, config]
基本操作
-
创建一个kafka topic
sh kafka-topics.sh --create --zookeeper 192.168.152.132:2181 --replication-factor 1 --partitions 1 --topic MyTopic -
创建一个生产者
sh kafka-console-producer.sh --broker-list 192.168.152.132:9092 --topic MyTopic -
创建一个消费者
sh kafka-console-consumer.sh --bootstrap-server 192.168.152.132:9092 --topic MyTopic --from-beginning
kafka的实现细节
消息
消息由key(可选)和value组成,key来决定消息放在哪一个分区。可批量发送。
topic & partition
topic是用来存储消息的逻辑概念。生产者发送消息时制定topic,topic根据key来将消息散列在不同的分区partition中,每个分区中消息按照新旧顺序来排列。
kafka高吞吐量的元素
- 消息按顺序存储
- 批量发送;batch.size、linger.ms,消息缓存在内存中,合适的时机批量发送。
- 零拷贝,FileChannel.transferTo
日志策略
日志保留策略
时间和大小
日志压缩策略
相同key的日志进行合并,保留最新的值
消息的可靠性
消息发送的可靠性
消息存储的可靠性
Partition的规则
高可靠性的副本
leader选举
数据同步
leader选举策略
ISR(副本同步队列)
维护的是有资格的follower
- 副本的所有节点必须和zookeeper保持连接状态
- 副本的最后一条消息的offset和leader的最后一条消息的offset之间的差值不能超过replica.lag.max.messages设置的值阈值
HW&LEO
highwatermark
leo offset
消息确认的方式
自动提交
手动提交
- 同步提交
- 异步提交
指定消费某个分区的消息
消息的消费原理
老版本kafka的offset的进度维护在zookeeper上,频繁读写zookeeper有性能因素。
新版本的consumer的offset维护在kafka内部的topic。
kafka分区分配策略
partition.assignment.strategy来指定策略