淘先锋技术网

首页 1 2 3 4 5 6 7

一、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