在批处理期间,Spring Kafka不会为墓碑记录返回null

时间:2019-02-25 12:59:14

标签: spring-kafka

似乎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

修复的

1 个答案:

答案 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引用此问题,我们也可以考虑为批处理侦听器解决它。