一、kafka常用基本概念
producer:生产者,生产并发送消息的一方。
consumer:消费者,接收消费消息的一方。
topic:一类消息的集合。在kafka中,消息以主题为单位进行归类,producer负责将消息发送到指定的主题,而consumer负责订阅主题并进行消费。
kafka中的一条消息其实就是一个包含<topic,partition,offset>消息三元组。
broker:服务代理节点。对于Kafka而言,Broker可以简单地看作一个独立的Kafka服务节点或Kafka服务实例。一个kafka集群中会有多个broker节点。一个broker可以容纳多个 topic。
partition:topic是一个逻辑上的概念,它还可以细分为多个分区,一个分区只属于单个topic,很多时候也会把分区称为主题分区(Topic-Partition)。同一主题下的不同分区包含的消息是不同的,分区在存储层面可以看作一个可追加的日志(Log)文件,消息在被追加到分区日志文件的时候都会分配一个特定的偏移量(offset)。offset是消息在分区中的唯一标识,Kafka通过它来保证消息在分区内的顺序性,不过offset并不跨越分区,也就是说,Kafka保证的是分区有序而不是topic有序。
producer在发送消息时候,具体发送到哪个pritition,有以下规则确定:
kafka默认轮询规则;
producer指定key,根据key的hash值,分配partition;
producer自定义规则;
replication:partition的副本,从leader replica同步数据,当kafka服务挂了之后,防止数据丢失。副本的数量不能超过broker的数量,否则创建主题时会失败。
领导者副本(leaderreplica):响应客户端发来的消息写入和消息消费请求。
追随者副本(followerreplica):从领导者副本同步数据,不响应客户端的读写请求。
segment:partition物理上由多个segment组成。segment中存储了索引和log数据。
offset:每个partition都由一系列有序的、不可变的消息组成,这些消息被连续的追加到partition中。partition中的每个消息都有一个连续的序列号叫做offset,用于partition唯一标识一条消息。
consumer group:kafka消费者组,一个组内可以有多个消费者,一个partition的消息只能被同一个组内的一个消费者消费。多个消费者组之间互相不影响。
二、kafka原理图
1.kafka基本概念图示
如图所示,一个producer,两个broker,一个topicA(两个partition,两个副本),一个消费者组(两个消费者)。
如上图所示,topic1中的两个partition分别在两个broker上面,其中两个副本也分布在两个broker上面,并且leader partition和follow partition分别在不同的broker上面,这样的目的是保证了kafka的高可用性,当任意一个broker挂掉之后,kafka仍然保证消息不丢失,服务的可用性。
leader partition负责提供读写服务,当leader partition挂掉之后,kafka会从follow partition中选举新的leader partition来提供读写服务。
2.partition结构图
partition中又细分为更小的存储单元segment,segment中存储索引和log数据,数据在partition追加,保证kafka消息在partition中的有序性。
segment的设计结构,在kafka中消息比较多的时候,清理起来效率更高,比单独操作一个更大的partition文件要方便的多,所以partition中又细分了segment存储单元。
三、常用命令
在kafka按照目录下,进入到bin目录下执行如下常用命令:
#进入到bin目录
cd /kafka/bin
#创建/删除topic
sh kafka-topics.sh --zookeeper localhost:2181 --create --topic test --replication-factor 1 --partitions 1
sh kafka-topics.sh --zookeeper localhost:2181 --delete --topic test
#生产数据
sh kafka-console-producer.sh --broker-list localhost:9092 --topic test
#消费数据
sh kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test
sh kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning
#查看消费组情况
sh kafka-consumer-groups.sh --bootstrap-server localhost:9092 --list
sh kafka-consumer-groups.sh --bootstrap-server localhost:9092 --group group_test --describe