【windows】安装zookeeper、Kafka、pykafka教程与基本概念详解

文章介绍了Zookeeper作为分布式协调服务框架的角色,如何解决分布式应用的协调问题。Kafka是一个高吞吐量的消息队列系统,适合实时数据流处理。pykafka是Python的Kafka客户端,简化了在Python项目中使用Kafka的流程。文章还涵盖了Zookeeper和Kafka的安装配置以及基本概念。
摘要由CSDN通过智能技术生成

一、 介绍

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'))

先运行消费者在运行生产者,输出结果
在这里插入图片描述

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

XiaoChao_AI

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值