消息中间件--04. Kafka常用的命令

启动zookeeper

1
2
$ bin/zkServer.sh start conf/zoo.cfg &
$ bin/zkCli.sh

启动Kafka

我们启动两个实例:

1
2
3
$ bin/kafka-server-start.sh -daemon config/server.properties
$ bin/kafka-server-start.sh -daemon config/server-1.properties

启动后,使用jps进程查看对应的kafka进程:
Kafka常用的命令

创建主题

现在我们来创建一个名字为testTopictestTopic1 的Topic,这个topic有两个partition,并且备份因子也设置为2:

1
2
$ bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 2 --partitions 2 --topic testTopic
$ bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 2 --partitions 2 --topic testTopic1

查看Kafka的实例

1
2
3
4
$ bin/zkCli.sh 
$ ls / #查看zk的根目录kafka相关节点
$ ls /brokers/ids #查看kafka节点

阅读更多

消息中间件--01. Kafka的几个疑问

Kafka是基于partition的模型,在消费的时候,消费者会和kafka建立一个绑定的关系。假设有一个topic有3个partition:P1,P2,P3,同时有一个消费group对应有3个消费者:C1,C2,C3,则消费会建立一个P1-C1,P2-C2,P3-C3的关系。

Kafka的文件机制

如果消费者数量多于partirion的话,就会有消费者空闲。

Kafka的文件机制

而如果partition个数比consumer个数多,则有可能导致有的消费者存在比其他消费者多的情况:

Kafka的文件机制

所以,kafka的最合理的分配机制是partition与consumer的成倍数关系,而且一个partition只能被一个消费者消费。

交代了Kafka的基本模型,下面再说几个疑问:

  1. 一个Consumer是什么意思,一个线程还是进程?
  2. 消费组是什么含义?
  3. 为什么一个partition不能被多个Consumer消费?
阅读更多

消息中间件--02. Kafka架构

几个概念

broker:集群中的每一台服务器,称为Broker

topic或者subject:队列名

partition:一个队列中的消息可以存储到多台broker上面,一个broker中的分区,称为partition

kafka的架构

消息队列的流程从生产者生产消息,通过TCP协议的网络请求发送到Kafka集群,然后Consumers来进行消费,具体如下图:

Kafka架构

其中生产者和消费者都相当于客户端。

Topic/Log/Partition

阅读更多

消息中间件--03. Kafka文件存储机制

kafka的文件系统

我们知道Kafka是一个Topic下有多个partition,具体结构如下:
Kafka架构

下面我们就探究下Kafka的partition的组成到底是什么。

partition的目录

假定我们在指定的一个集群中有两个Broker,有2个topic(testTopic,testTopic1),每个topic的都有2个partition,在不同的partition中互为对方的Leader。

Kafka架构

则会产生的文件目录应该为,partition的目录为:

 |---testTopic-0
 |---testTopic1-0
 |---testTopic-1
 |---testTopic1-1

从上面的分析中可以看出,kafka在文件的存储中,同一个topic下面有多个不同的partition,每一个partition对应为一个文件夹,partition的命名规则为topic+有序的序号。

阅读更多