kafka安装使用教程

下载地址:https://www.apache.org/dyn/closer.cgi?path=/kafka/1.0.2/kafka_2.11-1.0.2.tgz
文档地址:http://kafka.apache.org/10/documentation.html#quickstart
下载后配置,暂时不配

开启服务

开启zookeeper

> bin/zookeeper-server-start.sh config/zookeeper.properties
[2013-04-22 15:01:37,495] INFO Reading configuration from: config/zookeeper.properties (org.apache.zookeeper.server.quorum.QuorumPeerConfig)

开启kafka服务

> bin/kafka-server-start.sh config/server.properties
[2013-04-22 15:01:47,028] INFO Verifying properties (kafka.utils.VerifiableProperties)
[2013-04-22 15:01:47,051] INFO Property socket.send.buffer.bytes is overridden to 1048576 (kafka.utils.VerifiableProperties)
...

创建topic(主题/队列)

> bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test

查看主题列表

> bin/kafka-topics.sh --list --zookeeper localhost:2181
test

生产者推送消息

> bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test
This is a message
This is another message

消费者消费消息

> bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning
This is a message
This is another message

生产消费的合理配

使用3个producer同时对一个topic写入数据,其中使用2个group组来对数据进行读取,其中topic中的partitions定为2。在每个group下又创建2个consumer进行消费数据。

在项目刚开始,我只在topic中设置了一个partitions就是只有一个消费者来消费我传入的数据,但是由于项目的变化,消费的太慢写入的太快,给kafka带来了数据堆积,于是我又加了一个consumer来进行数据的消费,由于刚开始没有给group创建ID使用默认ID,但是发现我每个consumer消费的数据是相同的,并没有达到我的需求。kafka的一条数据会被我的2个consumer同时消费,消费2次,并没有增加效率,而且还给系统带来负担,后台查询官网API发现group中是有ID的,如果没有创建就自动使用默认ID这个一定要注意。其次是一个partition对应一个consumer,如果consumer的数量大于Topic中partition的数量就会有的consumer接不到数据(设置ID不使用默认ID的情况下)。 
为了满足的我业务需求我做了一下调整: 
增加topic中partition中的数量。 
相应增加consumer的数量 consumer的数量<=partition的数量 
这里需要强调的是不同的group组之间不做任何影响,就如同我一个group做python机器学习。另一个做Spark计算,这2个group的数据都是相互不影响的,这也是kafka很好用的东西。 
--------------------- 
作者:zhaishujie 
来源:CSDN 
原文:https://blog.csdn.net/zhaishujie/article/details/71713794 
 Consumer Group,同样是逻辑上的概念,是Kafka实现单播和广播两种消息模型的手段。同一个topic的数据,会广播给不同的group;同一个group中的worker,只有一个worker能拿到这个数据。换句话说,对于同一个topic,每个group都可以拿到同样的所有数据,但是数据进入group后只能被其中的一个worker消费。group内的worker可以使用多线程或多进程来实现,也可以将进程分散在多台机器上,worker的数量通常不超过partition的数量,且二者最好保持整数倍关系,因为Kafka在设计时假定了一个partition只能被一个worker消费(同一group内)。
 topic

是一个逻辑概念。

MQ中的抽象概念,是一个消费标示。用于保证Producer以及Consumer能够通过该标示进行对接。可以理解为一种Naming方式。

partition

是一个物理概念。partition会实际存储在系统的摸个目录。

Topic的一个子概念,一个topic可具有多个partition,但Partition一定属于一个topic。

值得注意的是:

在实现上都是以每个Partition为基本实现单元的。
消费时,每个消费线程最多只能使用一个partition。
一个topic中partition的数量,就是每个user group中消费该topic的最大并行度数量。
User group

为了便于实现MQ中的多播,重复消费等引入的概念。如果ConsumerA以及ConsumerB同在一个UserGroup,那么ConsumerA消费的数据ConsumerB就无法消费了。

即:所有usergroup中的consumer使用一套offset。

Offset

Offset专指Partition以及User Group而言,记录某个user group在某个partiton中当前已经消费到达的位置。
----------------- 
作者:kuluzs 
来源:CSDN 
原文:https://blog.csdn.net/kuluzs/article/details/71171537 

自己的笔记:当消费得太慢时,要把topic分区和增加消费者,consumer的数量<=partition的数量

猜你喜欢

转载自blog.csdn.net/w786572258/article/details/83502697