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

def producer_demo():
    # 假设生产的消息为键值对（不是一定要键值对），且序列化方式为json
    producer = KafkaProducer(
        bootstrap_servers=['101.132.127.1:19092'], 
        key_serializer=lambda k: json.dumps(k).encode(),
        value_serializer=lambda v: json.dumps(v).encode())
    
    # 发送三条消息
    for i in range(0, 3):
        future = producer.send(
            'alg-task-results',
            key='count_num',  # 同一个key值，会被送至同一个分区
            value=str(i))  # 向分区1发送消息
        print("send {}".format(str(i)))
        try:
            future.get(timeout=10) # 监控是否发送成功           
        except kafka_errors:  # 发送失败抛出kafka_errors
            traceback.format_exc()
            
    for ii in range(30):
        time.sleep(10)
        print('sleep %d s'%(ii*10))  
                
    for i in range(10, 20):
        future = producer.send(
            'alg-task-results',
            key='count_num',  # 同一个key值，会被送至同一个分区
            value=str(i))  # 向分区1发送消息
        print("send {}".format(str(i)))
        try:
            future.get(timeout=10) # 监控是否发送成功           
        except :  # 发送失败抛出kafka_errors
            traceback.format_exc()
def prod():                
    producer = KafkaProducer(
        bootstrap_servers=['101.132.127.1:19092'], 
        key_serializer=lambda k: json.dumps(k).encode(),
        value_serializer=lambda v: json.dumps(v).encode())
        
    # 发送三条消息
    for i in range(0, 3):
        future = producer.send(
            'alg-task-results',
            key='count_num',  # 同一个key值，会被送至同一个分区
            value=str(i))  # 向分区1发送消息
        print("send {}".format(str(i)))
        try:
            future.get(timeout=10) # 监控是否发送成功           
        except kafka_errors:  # 发送失败抛出kafka_errors
            traceback.format_exc()

    for ii in range(30):
            time.sleep(10)
            print('sleep %d s'%(ii*10)) 

    for i in range(0, 3):
        future = producer.send(
            'alg-task-results',
            key='count_num',  # 同一个key值，会被送至同一个分区
            value=str(i))  # 向分区1发送消息
        print("send {}".format(str(i)))
        try:
            future.get(timeout=10) # 监控是否发送成功           
        except kafka_errors:  # 发送失败抛出kafka_errors
            traceback.format_exc()            
if __name__=='__main__':
    print('########demo2 1st############')
    prod()
    print('########demo1 2nd############')
    prod()
    