2015-10-20 95 views
2

我想做一个简单的函数python kafka,并且我在将一个字符串循环传递给producer.send_messages方法时遇到了麻烦。如何通过函数循环到python中的方法调用

from kafka import SimpleProducer, KafkaClient 
import random 
import os 

kafka = KafkaClient('localhost:9092') 
producer = SimpleProducer(kafka) 
x = 0 

while x!=1: 
     #producer.send_messages(b'test1',b'str(i)') #the program will run with this type of input 
     a=random.random() 
     message_method= "b"+"'"+topic+"'"+","+"b"+"'"+str(a)+"'" 
     producer.send_messages(message_method) 

我将结束与此错误,

File "<stdin>", line 4, in <module> 
    File "/usr/lib/python2.7/site-packages/kafka/producer/simple.py", line 52, in send_messages 
    partition = self._next_partition(topic) 
    File "/usr/lib/python2.7/site-packages/kafka/producer/simple.py", line 36, in _next_partition 
    self.client.load_metadata_for_topics(topic) 
    File "/usr/lib/python2.7/site-packages/kafka/client.py", line 378, in load_metadata_for_topics 
    kafka.common.check_error(topic_metadata) 
    File "/usr/lib/python2.7/site-packages/kafka/common.py", line 233, in check_error 
    raise error_class(response) 
kafka.common.UnknownError: TopicMetadata(topic="b'test1',b'0.595202345912'", error=17, partitions=[]) 

我明白任何意见,使之成为一个更加动态的方式(不需要硬编码b'messages' ...等),以该也把信息放入卡夫卡。 :d

+0

为什么要将字符串分割为单字符串然后连接它们?无论如何,写这行的“现代”方法是:message_method =“b”{}',b'{}'“.format(topic,a)'。 – TigerhawkT3

+0

是啊,这仍然没有工作,错误
'文件 “simpleproducer.py”,第11行,在 producer.send_messages(message_method) ... kafka.common.check_error(topic_metadata) 文件“/ usr/lib目录/python2.7/site-packages/kafka/common.py“,第233行,在check_error中 raise error_class(response) kafka.common.UnknownError:TopicMetadata(topic =”b'test1,b'0.23424'“,error = 17,partitions = [])' –

+0

哦,我不知道是什么原因导致了错误 - 我只是想给你一个更简洁的方式来写这个字符串。你现在在那里有相当于'print'('h'+'e'+'l'+'l'+'o'+''+'w'+'o'+'r'+'l' + 'd')'。 – TigerhawkT3

回答

0

您应该使用send_message功能是这样的:

producer.send_messages('test1', str(a))

我认为这是比较合适的。

+0

它需要在每个参数前加上一个字节'producer.send_messages(b'test1',b'str(i)')''符号,因为它有字节传输,并且这个原因在输入中格式化。 –