kafka的基本使用(更新中)

kafka的安装路径:/usr/local/Cellar/kafka/3.2.0

kafka的配置路径:/usr/local/etc/kafka

开启zookeeper

cd /usr/local/Cellar/kafka/3.2.0

执行脚本启动zookeeper:

bin/zookeeper-server-start /usr/local/etc/kafka/zookeeper.properties

启动kafka,在打开一个窗口:

cd /usr/local/Cellar/kafka/3.2.0

执行脚本启动kafka:

bin/kafka-server-start /usr/local/etc/kafka/server.properties

测试创建一个主题,再打开一个窗口

cd /usr/local/Cellar/kafka/3.2.0

执行命令,创建一个主题

网上介绍的写法:bin/kafka-topics --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic wangyake-test 这个对于3.0.0的kafka已经不适用了

正确的是:bin/kafka-topics --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic wangyake-test

其中--bootstrap-server localhost:9092 指出了要连接的kafka的服务器的地址,必填项,zookeeper的地址在kafka的配置中有,启动的时候就会默认链接。

–create 创建主题命令
–replication-factor 1 指定副本个数
–partitions 1 指定分区个数
–topic test 主题名称

查看是否成功创建主题

bin/kafka-topics --list --bootstrap-server localhost:9092

python中的基本使用方式demo

配置文件config.py:

SERVER = '127.0.0.1:9092'
TOPIC = 'test'

生产者producer.py:

import json
import time
import datetime
import config
from kafka import KafkaProducer

# bootstrap_servers指的是kafka服务器
producer = KafkaProducer(
    bootstrap_servers=config.SERVER,
    value_serializer=lambda m: json.dumps(m).encode()
)

for i in range(100):
    data = {'num': i + 1, 'ts': datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'), "msg": "成功"}
    producer.send(config.TOPIC, data)
    time.sleep(1)

消费者consumer.py:

# consumer.py

import json

from kafka import KafkaConsumer
import config

# 第一个参数为topic的名称
# bootstrap_servers: 指定kafka服务器
# group_id : 指定此消费者实例属于的组名,可以不指定
consumer = KafkaConsumer(
    config.TOPIC,
    bootstrap_servers=config.SERVER,
    api_version=(0, 11, 5),
    group_id="ichpan",
    auto_offset_reset='earliest'
)

for msg in consumer:
    print(json.loads(msg.value))

# consumer可以同时监听多个消费者
# consumer = KafkaConsumer(
#     bootstrap_servers=config.SERVER,
#     group_id="ichpan",
#     auto_offset_reset='earliest'
# )

# 使用subscribe订阅
# consumer.subscribe(topics=["test",])

# for msg in consumer:
#     print(json.loads(msg.value))
posted @ 2022-07-07 20:04  HashFlag  阅读(85)  评论(0编辑  收藏  举报