python用kafka做消息队列

你得搭建 kafka zk 这样这个东西才能跑

生产者代码

#!/usr/bin/python
# encoding=utf-8

import datetime
import json

from common.OperationTimeHelper import OperationTimeHelper
from common.LoggerHelper import LogggerHelper
from kafka import KafkaProducer

operation = OperationTimeHelper()

today = datetime.date.today()
log_name = "logs/%s_postfix_antispam.log" % str(today)
logger = LogggerHelper('debug').my_log(log_name)




def start_log(log):
    with open(log, 'r', encoding='utf-8') as file_object:
        file_object.seek(0, 2)
        while True:
            # last_pos = file_object.tell()
            line = file_object.readline()
            if line:
                new_line = line.strip()
             
                    mail_json = parse_log(new_line)
                    conf = {
                        'bootstrap_servers': ["kafka-zookeeper-01:9092"],
                        'topic_name': 'send_antispam',
                    }
                    # print('start producer')
                    producer = KafkaProducer(bootstrap_servers=conf['bootstrap_servers'],value_serializer=lambda v: json.dumps(v).encode('utf-8'))
                    # data = bytes("hello kafka!", encoding="utf-8")
                    producer.send(conf['topic_name'], mail_json)
                    # producer.close()
                    # print('end producer')


if __name__ == '__main__':
    log_file = '/var/log/mail.log'
    start_log(log_file)

消费者代码

import json

from kafka import KafkaConsumer

conf = {
    'bootstrap_servers': ["kafka-zookeeper-01:9092"],
    'topic_name': 'send_antispam'
    # 'consumer_id': 'consumer-id'
}

print('start consumer')
consumer = KafkaConsumer(conf['topic_name'],
                         bootstrap_servers=conf['bootstrap_servers'])
# group_id=conf['consumer_id'])


# for message in consumer: print("%s:%d:%d: key=%s value=%s" % (message.topic, message.partition, message.offset,
# message.key, message.value))

for message in consumer:
    data = json.loads(message.value.decode('utf-8'))
    print(data)

print('end consumer')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值