python kafka 收发消息

import time
from time import sleep

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

kafkaList = ['192.168.6.15:9092', '192.168.6.21:9092', '192.168.6.26:9092']
def start_producer(topic):
    print(topic)
    producer = KafkaProducer(bootstrap_servers=kafkaList, key_serializer=lambda k: json.dumps(k).encode(), value_serializer=lambda v: json.dumps(v).encode(), api_version=(0, 1, 0))
    for i in range(0, 3):
        '''

        '''
        # 获得当前时间时间戳
        now = int(time.time())
        # 转换为其他日期格式,如:"%Y-%m-%d %H:%M:%S"
        timeStruct = time.localtime(now)
        strTime = time.strftime("%Y-%m-%d %H:%M:%S", timeStruct)
        msg = {
    
    }
        msg['userId'] = 888888
        msg['msgBody'] = {
    
    }
        msg['msgBody']['content'] = strTime
        print(msg)
        # 同一个key值,会被送至同一个分区
        future = producer.send(topic, json.dumps(msg), key=msg['userId'])
        try:
            future.get(timeout=10)
            # 监控是否发送成功
        except Exception as e:
            print(str(e))
        sleep(3)


def consumer_demo(topic='kafka_demo'):
    consumer = KafkaConsumer(topic, bootstrap_servers=kafkaList)

    for message in consumer:
        print("topic=={}".format(message.topic))
        msg = {
    
    }
        msg['topic'] = message.topic
        if message.key is not None:
            msg['key'] = json.loads(message.key.decode())
        msg['value'] = json.loads(message.value.decode())
        print(msg, message)

def consumer_more(topic=['kafka_demo']):
    consumer = KafkaConsumer(bootstrap_servers=kafkaList)
    consumer.subscribe(topic)  # 消费者订阅多个topic
    for message in consumer:
        # 'kafka_demo', 'kafka_demo1'
        if message.topic in ['kafka_demo', 'kafka_demo1']:
            continue
        print(
            message.topic,
            message.key,
            message.value.decode()
        )

def get_topics():
    consumer = KafkaConsumer(group_id='test', bootstrap_servers=kafkaList)
    topics = consumer.topics()
    print(topics)
    return topics

if __name__ == "__main__":
    topics = get_topics()
    topic = 'kafka_demo'
    # topic = 'kafka_demo1'
    consumer_more([i for i in topics])
    # consumer_demo(topic=topic)
    print('success')

猜你喜欢

转载自blog.csdn.net/lizhihua0625/article/details/124841651