Python操作Kafka例子

Kafka作为消息中间件是非常受欢迎的,对应Python库名为kafka-python

import json
import traceback
from kafka.errors import kafka_errors
from kafka import KafkaProducer, KafkaConsumer

producer = KafkaProducer(bootstrap_servers=['localhost:9092'], 
                         key_serializer=lambda key: json.dumps(key).encode(),
                         value_serializer=lambda value: json.dumps(value).encode())

for i in range(3):
    msg = 'message ' + str(i)
    future = producer.send('kafka_topic', key='count', value=msg)  
    print(f"send {msg}")
    try:
        future.get(timeout=10)    # 看是否发送成功           
    except kafka_errors:
        traceback.print_exc()

 上段为Kafka生产者,下段对应Kafka消费者,KafkaConsumer会进入持续接收状态;

consumer = KafkaConsumer('kafka_topic', bootstrap_servers=['localhost:9092'], group_id='test')
for msg in consumer:
    print(f"receive, key: {json.loads(msg.key.decode())}, value: {json.loads(msg.value.decode())}")

### 使用Python操作Kafka 对于希望利用Python与Apache Kafka交互的开发者而言,`kafka-python`库是一个流行的选择。此库提供了生产者和消费者API的支持,使得发送和接收消息变得简单。 #### 安装依赖包 为了开始,在环境中安装`kafka-python`: ```bash pip install kafka-python ``` #### 生产者示例 下面展示了一个简单的例子,用于向名为`test-topic`的主题发布消息[^1]。 ```python from kafka import KafkaProducer import json producer = KafkaProducer(bootstrap_servers='localhost:9092', value_serializer=lambda v: json.dumps(v).encode('utf-8')) for i in range(10): producer.send('test-topic', {'number': i}) producer.flush() producer.close() ``` 这段代码创建了一个新的生产者实例,并配置它连接到本地运行的Kafka服务器上。通过设置`value_serializer`参数,可以指定序列化函数处理要发布的数据对象。这里选择了JSON格式作为传输的数据格式[^2]。 #### 消费者示例 接下来是消费来自相同主题的消息的例子: ```python from kafka import KafkaConsumer consumer = KafkaConsumer( 'test-topic', bootstrap_servers=['localhost:9092'], auto_offset_reset='earliest', enable_auto_commit=True, group_id='my-group', value_deserializer=lambda x: json.loads(x.decode('utf-8'))) for message in consumer: print ("Received message: ", message.value) ``` 在这个脚本里,定义了一个消费者组`my-group`并订阅了之前提到过的`test-topic`主题。每当有新消息到达时,就会触发迭代器中的循环体执行打印语句。 值得注意的是,除了基本功能外,Kafka还支持多种结构化的数据格式以及模式版本控制等功能。这有助于确保不同系统间通信的一致性和兼容性。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值