一、 介绍
zookeeper
Zookeeper是一个开源的分布式协调服务框架,由Apache软件基金会管理。它主要用于解决分布式应用中的协调问题,如统一命名服务、配置管理、分布式锁、分布式队列等。Zookeeper的设计目标是提供一个高性能、高可靠性的分布式协调服务,使得开发者可以在分布式系统中更轻松地实现一致性和可靠性。
Zookeeper提供了一个简单的层次化的命名空间,并以树形结构组织数据节点,每个节点称为"znode"。每个znode都可以存储一些数据,并且可以设置触发器,当znode的状态发生变化时,可以通知监听这个znode的客户端。这使得Zookeeper非常适合用于协调分布式应用中的各个节点之间的状态和配置信息。
Kafka
Kafka是一个开源的分布式消息队列系统,由Apache软件基金会管理。它被设计用于高吞吐量、低延迟的消息传输,主要用于处理实时数据流。Kafka的设计目标是解决大规模数据传输和处理的问题,特别适用于流处理应用和实时数据分析。
Kafka的消息传输模型是基于发布-订阅的模式,生产者将消息发布到特定的主题(topic),消费者可以订阅感兴趣的主题并接收相应的消息。Kafka将消息以日志的形式持久化存储,并支持高可靠性和数据冗余。它使用分区(partition)和副本(replication)的概念来实现数据的分布式存储和冗余备份,以提供高可用性和容错性。
pykafka
pykafka是一个用于Python语言的Kafka客户端库,它提供了Python API来操作Kafka集群,并实现了Kafka的各种功能,如消息的生产和消费、消费者组管理、分区和副本管理等。pykafka使用纯Python实现,简单易用,适合在Python项目中集成和使用Kafka。
pykafka提供了多种消费者模式,包括简单消费者(SimpleConsumer)、高级消费者(SimpleConsumer)、消费者组(ConsumerGroup)等,可以根据应用场景选择适合的消费者模式。同时,pykafka还支持多线程消费、异步消费等特性,使得Python开发者能够更方便地在Python应用中使用Kafka。
总结
Zookeeper是用于分布式协调的开源框架,Kafka是用于高吞吐量、低延迟消息传输的分布式消息队列系统,而pykafka是用于Python语言的Kafka客户端库,用于在Python项目中操作Kafka集群。它们共同构成了一个完整的分布式消息传输和处理系统。
二、 zookeeper
本机要安装JDK
官网下载地址: https://zookeeper.apache.org/releases.html
下载后解压到自己设定的目录文件夹。
1)、将conf目录下的zoo_sample.cfg文件,复制一份,重命名为zoo.cfg
2)、在安装目录下面新建一个空的data文件夹和log文件夹
3)、修改zoo.cfg配置文件,将dataDir=/tmp/zookeeper修改成zookeeper目录的data文件夹,再添加日志的配置。
注意:dataDir和dataLogDir这两个路径的分隔符要用/,而不是\,因为windows的分隔符是/.否则会出现data和log目录中的文件出现在bin目录下。
3)、启动
bin目录下面找到zkServer.cmd、zkCli.cmd
zkServer.cmd 启动zookeeper服务
zkCli.cmd 验证是否安装成功
三、 Kafka
producer: 消息生产者,就是向kafka broker发消息的客户端。
consumer: 消息消费者,是消息的使用方,从Kafka Broker 拉取消息,负责消费Kafka服务器上的消息。
topic: 主题,由用户定义并配置在Kafka服务器,用于建立Producer和Consumer之间的订阅关系。生产者发送消息到指定的Topic下,消息者从这个Topic下消费消息。你可以把它理解为一个队列,topic 将消息分类,生产者和消费者面向的是同一个 topic。
partition:消息分区,一个topic可以分为多个 partition,partition是相对于topic是在在物理上的概念,每个partition是一个有序的队列,partition中的每条消息都会被分配一个有序的id(offset)。
broker :一台kafka服务器就是一个broker。一个集群由多个broker组成。一个broker可以容纳多个topic。
consumer-group:消费者分组,用于归组同类消费者。每个consumer属于一个特定的consumer group,多个消费者可以共同消息一个Topic下的消息,每个消费者消费其中的部分消息,这些消费者就组成了一个分组,拥有同一个分组名称,通常也被称为消费者集群。
消费者组内每个消费者,负责消费不同分区的数据,提高消费能力。一个分区只能由组内一个消费者消费,消费者组之间互不影响。所有的消费者都属于某个消费者组,即消费者组是逻辑上的一个订阅者。
offset :消息在partition中的偏移量。每一条消息在partition都有唯一的偏移量,消息者可以指定偏移量来指定要消费的消息。记录消费者消费的位置信息,监控数据消费到什么位置,当消费者挂掉,再重新恢复的时候,可以从消费位置继续消费。
Zookeeper: Kafka 集群能够正常工作,需要依赖于 zookeeper,zookeeper 帮助Kafka 存储和管理集群信息。
官网下载地址:https://kafka.apache.org/downloads
下载后解压到自己设定的目录文件夹。
1)、进入config目录找到文件server.properties并打开
编辑log.dirs=自己设定的目录,编辑zookeeper.connect=localhost:2181
2)、进入Kafka安装目录运行命令行
.\bin\windows\kafka-server-start.bat .\config\server.properties
四、 pykafka安装及使用
pip install pykafka==2.8.0
生产者
from pykafka import KafkaClient
from pykafka.exceptions import SocketDisconnectedError, LeaderNotAvailable
client = KafkaClient(hosts='localhost:9092')
topic = client.topics['test'.encode()]
producer = topic.get_sync_producer()
try:
for i in range(1,10):
producer.produce(('hello kafka={}'.format(i).encode()))
except (SocketDisconnectedError, LeaderNotAvailable) as e:
pass
消费者
from pykafka import KafkaClient
host = 'localhost:9092'
client = KafkaClient(hosts=host)
# 消费者
topic = client.topics['test'.encode()]
consumer = topic.get_simple_consumer(consumer_group=b'test_group', auto_commit_enable=True, auto_commit_interval_ms=1,
consumer_id=b'test_id')
for message in consumer:
if message is not None:
print(message.offset, message.value.decode('utf-8'))
先运行消费者在运行生产者,输出结果