python发送数据到kafka_python从kafka消费数据且写入kafka

这是一个Python实现的Kafka数据发送和消费的示例。程序通过KafkaProducer发送数据到主题'poseidon_receiver_raw_data_RTCM3.2',并使用KafkaConsumer从同一主题消费数据。代码中包含了生产者和消费者的初始化,以及数据发送和消费的逻辑。
摘要由CSDN通过智能技术生成

简单记录一个读写kafka demo

#!/usr/bin/python3

# -*- coding: utf-8 -*-

import logging

import time # 引入time模块

from kafka import KafkaConsumer

from kafka import KafkaProducer

from kafka.errors import KafkaError

# 循环发送数据次数

n = 1

#数据从174获取,发送到175

KAFAKA_TOPIC = "poseidon_receiver_raw_data_RTCM3.2"

KAFAKA_HOST_PRODUCTER = "192.168.xx.xx"

KAFAKA_HOST_CONSUMER = "192.168.xx.xx"

KAFAKA_PORT = 9092

logging.basicConfig(

level=logging.INFO, # 定义输出到文件的log级别,大于此级别的都被输出

# format='%(asctime)s %(filename)s %(levelno)s : %(levelname)s %(message)s', # 定义输出log的格式

format='%(asctime)s : %(message)s', # 定义输出log的格式

datefmt='%Y-%m-%d %A %H:%M:%S', # 时间

filename='obs_info.log', # log文件名

filemode='w') # 写入模式“w”或“a”

class Kafka_producer():

'''''

生产模块:根据不同的key,区分消息

'''

def __init__(self, kafkahost, kafkaport, kafkatopic):

self.kafkaHost = kafkahost

self.kafkaPort = kafkaport

self.kafkatopic = kafkatopic

print("producer:h,p,t", kafkahost, kafkaport, kafkatopic)

bootstrap_servers = '{kafka_host}:{kafka_port}'.format(

kafka_host=self.kafkaHost,

kafka_port=self.kafkaPort

)

print("boot svr:", bootstrap_servers)

self.producer = KafkaProducer(bootstrap_servers=bootstrap_servers)

def send(self, k, v):

try:

producer = self.producer

k = k.encode('utf-8')

resp = producer.send(self.kafkatopic, key=k, value=v)

# print(resp.succeeded())

producer.flush()

except KafkaError as e:

print(e)

class Kafka_consumer():

def __init__(self, kafkahost, kafkaport, kafkatopic, groupid):

self.kafkaHost = kafkahost

self.kafkaPort = kafkaport

self.kafkatopic = kafkatopic

self.groupid = groupid

self.consumer = KafkaConsumer(self.kafkatopic, group_id=self.groupid,

bootstrap_servers='{kafka_host}:{kafka_port}'.format(

kafka_host=self.kafkaHost,

kafka_port=self.kafkaPort)

)

def consume_data(self):

try:

for message in self.consumer:

yield message

except KeyboardInterrupt as e:

print(e)

if __name__ == '__main__':

group = 'tunnel2QA'

consumer = Kafka_consumer(KAFAKA_HOST_PRODUCTER, KAFAKA_PORT, KAFAKA_TOPIC, group)

producer = Kafka_producer(KAFAKA_HOST_CONSUMER, KAFAKA_PORT, KAFAKA_TOPIC)

message = consumer.consume_data()

pre_time = 0

for msg in message:

key = str(msg.key, "utf-8")

ticks = int(time.time())

if pre_time != ticks:

for i in range(0, n):

key = i << 8 + 1 # key自定义

producer.send(str(key), msg.value)

pre_time = ticks

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值