1.概念
一种高吞吐量的分布式、支持分区的(partition)、多副本的(replication),基于zookeeper协调的消息系统。
- Message 消息数据,消息队列MQ
- Broker 集群中服务器统称,中间人释义
- Topic 消息的类别
- Partition 每个Partition都有3个副本
- Segment 一个Partition有多个Segment,分Segment管理减少单个文件太大的问题,有index索引能方便更快速定位
- Producer 发布消息到kafka broker
- Consumer 消息者,读取消息
- 发布publish、订阅subscribe
- Consumer Group 消费者组共享订阅的topic消息,topic中的每个消息中只会被一个consumer消费
- Offset 偏移量 递增的id,我们称之为Offset。它唯一标识了分区中的消息。
- 消息系统的一般性语义说明 ☆
三种语义定义(适用于生产者和消费者两大场景)
- 最多1次(At most once):消息可能丢失,但不会重复投递
只管写入,不去确认ACK确定应答消息 - 最少1次(At least once): 消息不会丢失,但可能会重复投递
没有返回ACK确定应答,再写一次 - 严格1次(Exactly once) : 消息不丢失、不重复,有且只会被分发一次
精准生产,幂等性(多次操作只有一次能真正生效)
2.架构设计
2.1 ZooKeeper协同服务
- 概念说明
分布式环境下的第三方协同服务,帮助分布式系统,比如存储、计算、调度等均需要协同服务。 - 特点特征
简单、易使用、高效、稳定 - 应用场景
核心是要解决一致性问题
分布式环境下的命名一致性问题
分布式服务环境下的高可用性问题
核心还是一个选举策略问题 - 代码实现
Zk其实内部就是一个多叉树结构
2.2 shell操作
Kafka提供五大核心API:
- Producer API
- Consumer API
- Connector API
- Streams API
- Admin API
1 . 创建一个topic
sh /usr/hdp/3.1.0.0-78/kafka/bin/kafka-topics.sh
--create --zookeeper cluster1.hadoop:2181
--replication-factor 1 --partitions 1 --topic kafkajt
- 查看所有主题
sh /usr/hdp/3.1.0.0-78/kafka/bin/kafka-topics.sh
--list --zookeeper cluster1.hadoop:2181
- 删除一个topic,前提是设置必要的参数为true,即可
delete.topic.enable=true
sh /usr/hdp/3.1.0.0-78/kafka/bin/kafka-topics.sh
--delete --zookeeper cluster1.hadoop:2181 --topic kafkajt
- 作为生产者向指定Broker发送消息
sh /usr/hdp/3.1.0.0-78/kafka/bin/kafka-console-producer.sh
--broker-list cluster0.hadoop:6667 --topic kafkajt
- consumer从topic消费消息数据
sh /usr/hdp/3.1.0.0-78/kafka/bin/kafka-console-consumer.sh
--bootstrap-server cluster0.hadoop:6667 -topic kafkajt -from-beginning
- 查看指定topic状态信息
sh /usr/hdp/3.1.0.0-78/kafka/bin/kafka-topics.sh
--describe --zookeeper sc-slave1:2181 --topic kafkajt
7.查看所有topic状态信息
//不添加--topic参数,则为查看所有topic的状态信息
sh /usr/hdp/3.1.0.0-78/kafka/bin/kafka-topics.sh
--describe --zookeeper sc-slave1:2181