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))
### Kafka 基本概念 Kafka 是一种分布式流处理平台,主要用于高吞吐量的实时数据传输和处理。它最初由 LinkedIn 开发并开源,广泛应用于日志收集、监控数据聚合、在线和离线分析等领域。 #### Topic(主题) 主题是 Kafka 中的一个核心概念,表示一类消息或者一个 feed 名称[^4]。它可以看作是一个分类器,用于区分不同类型的数据。每个主题可以有多个生产者向其发送消息,同时也有多个消费者订阅这些消息。主题中的消息会被存储一段时间,具体时间可以通过配置来设定。 #### Broker(代理) Broker 是 Kafka 集群中的节点[^1]。每个 Kafka 实例运行在一个 Broker 上,负责接收来自 Producer 的消息并将它们存储在磁盘中。此外,Broker 还负责响应 Consumer 请求并向其提供所需的消息。 #### Producer(生产者) 生产者是指向 Kafka 主题发布消息的应用程序或服务[^1]。Producer 负责将数据序列化为字节流,并将其发送到指定的主题。为了提高性能,Producer 可以批量发送消息或将消息压缩后再发送。 #### Consumer(消费者) 消费者是从 Kafka 主题订阅消息的应用程序或服务[^3]。Consumer 使用 Pull 模型从 Broker 获取数据,而不是依赖 Push 模型。这样设计的好处在于能够更好地控制流量以及应对突发的大规模请求。另外,Consumer 需要记录自己的消费位置 (Offset),以便在网络中断或其他异常情况发生后可以从上次停止的地方继续消费。 #### Partition(分区) 分区是对同一主题下不同部分进行划分的结果。通过引入分区机制,不仅实现了水平扩展能力(即增加更多的机器加入集群从而分担负载压力),而且也支持并发访问同一个主题的不同子集。每条记录只会属于某一分区内的某个偏移量(offset)处。值得注意的是,在创建新分区时无法迁移已存在的旧数据至新的分区之中。 #### ISR 和 Leader/Follower - **ISR(In-Sync Replicas)** 表示当前同步状态良好的副本集合[^1]。只有当 follower 完全复制了 leader 所有的更新操作之后才能成为 isr 成员之一。 - 对于每一个 partition 来说都存在两种类型的 leaders: - **Controller Leader**: 控制整个 cluster metadata changes like creating/deleting topics etc. - **Partition Leader**: 处理 client requests related to that particular partition. #### 数据持久性和可靠性保障措施 每当 producer 将一条 message 发送给特定 topic-partition 后,kafka 不会立即将此 message 存储进 memory cache ,而是直接 flush 到 disk log file 当中去[^2].这种做法虽然牺牲了一定程度的速度优势但却极大地增强了 system fault tolerance level because even if there was a crash immediately after writing but before acknowledging receipt back to sender side still all written records would remain safe on persistent storage medium until they get consumed by corresponding consumers later according their retention policy settings defined earlier during setup phase of respective environments accordingly as well ! ```python from kafka import KafkaProducer producer = KafkaProducer(bootstrap_servers='localhost:9092') future = producer.send('my-topic', b'raw_bytes') result = future.get(timeout=60) print(result) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值