似乎Spring Spring Kafka在批处理期间忽略了@Payload(required = false)
注释。无论如何,我总是收到null
个对象,而不管Tombstone
注释中设置了什么,而不是得到KafkaNull
的{{1}}。
我的代码如下:
@Payload
没什么特别的。我收到条目列表,但始终以@KafkaListener(topics = ["\${kafka.topic.categories}"])
fun receive(
@Header(KafkaHeaders.RECEIVED_MESSAGE_KEY) List<String> keys,
@Payload(required = false) categories: List<Category>
) {
...
}
记录的形式KafkaNull
记录,这会导致类广播异常。
在非批处理模式下,一切都按预期运行。
你知道为什么吗?
更新: 它是通过https://github.com/spring-projects/spring-kafka/issues/974
修复的答案 0 :(得分:0)
这是实现参数转换方式的限制。
使用#Twitter API for more data (save to local file)
consumer_key = ''
consumer_secret = ''
access_token = ''
access_secret = ''
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_secret)
#Store data on tweet_json.txt
with open('tweet_json.txt', 'w') as outfile:
for tweet_id in twitter_archive['tweet_id']:
try:
tweet = api.get_status(tweet_id, tweet_mode='extended')
#Convert to JSON and write
json.dump(tweet._json, outfile)
outfile.write("\n")
except:
print('ERROR: Error on tweet id {}'.format(tweet_id))
e = os.sys.exc_info()[0]
#Save only certain tweet elements in dataframe
elements_to_save = ['id', 'favorite_count', 'retweet_count']
#Convert list to dataframe
data = []
with open('tweet_json.txt', 'r') as readfile:
tweet_json = readfile.readline()
# Read line by line into DataFrame
while tweet_json:
tweet_dict = json.loads(tweet_json)
# Create a smaller dict
data_row = dict((k, tweet_dict[k]) for k in elements_to_save)
data.append(data_row)
# Read in JSON line and convert to dict
tweet_json = readfile.readline()
df_tweet_info = pd.DataFrame.from_dict(data)
时,参数为事物列表,而参数解析器看不到“事物”;使用List<Foo>
,我们可以在参数解析器中检测到KafkaNull。
如果您open a GitHub issue引用此问题,我们也可以考虑为批处理侦听器解决它。