我正在使用来自卡夫卡主题的数据,其中包括区号。我必须仅过滤某些区号的数据。任何人都可以建议解决这个问题的最佳方法吗?
这是我的监听器代码的样子。最佳实践是将数据解析为对象(因为我将有效负载映射到 TEST 对象)并根据我需要过滤的值过滤数据,或者 kafka 是否提供了我可以使用此过滤过程的任何其他库。
Kafka监听器方法
@Service
public class Listener{
@KafkaListener(topics = "#{@topicName}")
public void listen(String payload) throws IOException {
LOGGER.info("received payload from topic='{}'", payload);
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
TEST test = objectMapper.readValue(payload,TEST.class);
}
}
Run Code Online (Sandbox Code Playgroud)
我的卡夫卡配置类:
@Configuration
public class Config {
@Bean
public Map<String, Object> consumerConfigs() {
Map<String, Object> properties = new HashMap<>();
properties.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, applicationConfiguration.getKafkaBootStrap());
properties.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, applicationConfiguration.getKafkaKeyDeserializer());
properties.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, applicationConfiguration.getKafkaValueDeserializer());
properties.put(ConsumerConfig.GROUP_ID_CONFIG, applicationConfiguration.getKafkaGroupId());
properties.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, applicationConfiguration.getKafkaAutoOffsetReset());
return properties;
}
@Bean
public ConsumerFactory<String, String> consumerFactory() {
return new DefaultKafkaConsumerFactory<>(consumerConfigs());
} …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 Java 模式匹配器在文件扩展名之前提取四位数字。它抛出没有组发现异常。有人可以帮我解决这个问题吗?
String fileName = "20210101-000000_first_second_1234.csv";
Pattern pattern = Pattern.compile("\\\\d{4}");
System.out.println(pattern.matcher(fileName).group(4));
Run Code Online (Sandbox Code Playgroud)
我想1234从文件名中获取。我使用 regex 编译了文件模式\\\\d{4}。返回四个组。因此,第四组应该假设返回1234未返回的内容,而不是抛出组未找到异常。