Added kafka settings to props

This commit is contained in:
Mikhail Trofimov 2026-06-29 16:51:14 +03:00
parent d958d73609
commit ecbea33a7e
8 changed files with 74 additions and 30 deletions

View file

@ -22,9 +22,9 @@ ct.indic-data-source-settings.leak-detection-threshold=${LEAK_DETECTION_THRESHOL
# signal
ct.signal-data-source-settings.driver=org.postgresql.Driver
ct.signal-data-source-settings.url=${DB_URL_SIGNAL:jdbc:postgresql://10.200.200.133:5432/credit_tracker?currentSchema=test_2}
ct.signal-data-source-settings.url=${DB_URL_SIGNAL:jdbc:postgresql://10.230.227.125:5432/credit_tracker?currentSchema=test}
ct.signal-data-source-settings.username=${USERNAME_SIGNAL:credit_tracker_user}
ct.signal-data-source-settings.password=${PASSWORD_SIGNAL:-}
ct.signal-data-source-settings.password=${PASSWORD_SIGNAL:password}
ct.signal-data-source-settings.maximum-pool-size=${MAXIMUM_POOL_SIZE_SIGNAL:40}
ct.signal-data-source-settings.minimum-idle=${MINIMUM_IDLE_SIGNAL:10}
ct.signal-data-source-settings.connection-timeout=${CONNECTION_TIMEOUT_SIGNAL:10000}
@ -80,7 +80,7 @@ ct.tmp.dir=D:\\folder_name\\signals\\tmp
ct.target.dir=D:\\folder_name\\signals\\tmpt
# min
ct.monitoring-interval=${MONITORING_INTERVAL:15}
ct.monitoring-interval=${MONITORING_INTERVAL:5}
# days
ct.update-flags-cron-expression=${UPDATE_FLAGS_CRON_EXPRESSION:0 25 18 * * *}
ct.new-flags-cron-expression=${NEW_FLAGS_CRON_EXPRESSION:0 25 18 * * *}
@ -88,6 +88,15 @@ ct.days-to-update-flags=${DAYS_TO_UPDATE_FLAGS:30}
ct.update-fid-cron-expression=${UPDATE_FIDS_CRON_EXPRESSION:0 10 12 * * *}
ct.days-to-update-fids=${DAYS_TO_UPDATE_FIDS:30}
#kafka
ct.kafka-consumer-settings.topic=${CONSUMER_TOPIC:my-topic}
ct.kafka-consumer-settings.concurency=${CONSUMER_CONCURENCY:8}
ct.kafka-consumer-settings.bootstrap-servers=${CONSUMER_BOOTSTRAP_SERVERS:localhost:29092}
ct.kafka-consumer-settings.group-id=${CONSUMER_GROUP_ID:credit-tracker}
ct.kafka-consumer-settings.auto-offset-reset=${CONSUMER_AUTO_OFFSET_RESET:latest}
ct.kafka-consumer-settings.max-poll-records=${CONSUMER_MAX_POLL_RECORDS:125}
ct.kafka-consumer-settings.max-poll-interval-ms=${CONSUMER_MAX_POLL_INTERVAL_MS:300000}
ct.db-version=${DB_VERSION:1234}
ct.encoding=windows-1251

View file

@ -75,6 +75,15 @@ MAX_LIFETIME_NBCH=1800000
KEEPALIVE_TIME_NBCH=0
LEAK_DETECTION_THRESHOLD_NBCH=0
#kafka consumer
CONSUMER_TOPIC=my-topic
CONSUMER_CONCURENCY=8
CONSUMER_BOOTSTRAP_SERVERS=localhost:29092
CONSUMER_GROUP_ID=credit-tracker
CONSUMER_AUTO_OFFSET_RESET=latest
CONSUMER_MAX_POLL_RECORDS=125
CONSUMER_MAX_POLL_INTERVAL_MS=300000
# размер в mb
ACCEPTED_XML_SIZE=1024
ACCEPTED_ARCHIVE_SIZE=2048MB

View file

@ -69,6 +69,13 @@ services:
- MAX_LIFETIME_NBCH=${MAX_LIFETIME_NBCH}
- KEEPALIVE_TIME_NBCH=${KEEPALIVE_TIME_NBCH}
- LEAK_DETECTION_THRESHOLD_NBCH=${LEAK_DETECTION_THRESHOLD_NBCH}
- CONSUMER_TOPIC=${CONSUMER_TOPIC}
- CONSUMER_CONCURENCY=${CONSUMER_CONCURENCY}
- CONSUMER_BOOTSTRAP_SERVERS=${CONSUMER_BOOTSTRAP_SERVERS}
- CONSUMER_GROUP_ID=${CONSUMER_GROUP_ID}
- CONSUMER_AUTO_OFFSET_RESET=${CONSUMER_AUTO_OFFSET_RESET}
- CONSUMER_MAX_POLL_RECORDS=${CONSUMER_MAX_POLL_RECORDS}
- CONSUMER_MAX_POLL_INTERVAL_MS=${CONSUMER_MAX_POLL_INTERVAL_MS}
- ACCEPTED_XML_SIZE=${ACCEPTED_XML_SIZE}
- ACCEPTED_ARCHIVE_SIZE=${ACCEPTED_ARCHIVE_SIZE}
- SIGNALS_ROOT_URI=${SIGNALS_ROOT_URI}
@ -164,6 +171,13 @@ services:
- MAX_LIFETIME_NBCH=${MAX_LIFETIME_NBCH}
- KEEPALIVE_TIME_NBCH=${KEEPALIVE_TIME_NBCH}
- LEAK_DETECTION_THRESHOLD_NBCH=${LEAK_DETECTION_THRESHOLD_NBCH}
- CONSUMER_TOPIC=${CONSUMER_TOPIC}
- CONSUMER_CONCURENCY=${CONSUMER_CONCURENCY}
- CONSUMER_BOOTSTRAP_SERVERS=${CONSUMER_BOOTSTRAP_SERVERS}
- CONSUMER_GROUP_ID=${CONSUMER_GROUP_ID}
- CONSUMER_AUTO_OFFSET_RESET=${CONSUMER_AUTO_OFFSET_RESET}
- CONSUMER_MAX_POLL_RECORDS=${CONSUMER_MAX_POLL_RECORDS}
- CONSUMER_MAX_POLL_INTERVAL_MS=${CONSUMER_MAX_POLL_INTERVAL_MS}
- SIGNALS_ROOT_URI=${SIGNALS_ROOT_URI}
- SIGNALS_TOKEN=${SIGNALS_TOKEN}
- SIGNALS_USER=${SIGNALS_USER}

View file

@ -12,6 +12,7 @@ import org.springframework.kafka.core.*;
import org.springframework.kafka.listener.ContainerProperties;
import org.springframework.kafka.support.serializer.JsonDeserializer;
import ru.nbch.credit_tracker.config.settings.CreditTrackerSettings;
import ru.nbch.credit_tracker.config.settings.KafkaConsumerSettings;
import ru.nbch.credit_tracker.entities.external_request.kafka.PackageMessage;
import ru.nbch.credit_tracker.model.SignalKafkaEvent;
@ -42,12 +43,14 @@ public class KafkaConfig {
}
@Bean
public ConsumerFactory<String, PackageMessage> consumerFactory() {
public ConsumerFactory<String, PackageMessage> consumerFactory(CreditTrackerSettings settings) {
KafkaConsumerSettings kafkaSettings = settings.getKafkaConsumerSettings();
Map<String, Object> props = new HashMap<>();
props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:29092");
props.put(ConsumerConfig.GROUP_ID_CONFIG, "credit-tracker");
props.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, "earliest");
props.put(ConsumerConfig.MAX_POLL_RECORDS_CONFIG, 20);
props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, kafkaSettings.bootstrapServers());
props.put(ConsumerConfig.GROUP_ID_CONFIG, kafkaSettings.groupId());
props.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, kafkaSettings.autoOffsetReset());
props.put(ConsumerConfig.MAX_POLL_RECORDS_CONFIG, kafkaSettings.maxPollRecords());
props.put(ConsumerConfig.MAX_POLL_INTERVAL_MS_CONFIG, kafkaSettings.maxPollIntervalMs());
JsonDeserializer<PackageMessage> jsonDeserializer = new JsonDeserializer<>(PackageMessage.class);
jsonDeserializer.addTrustedPackages("*");

View file

@ -27,6 +27,8 @@ public class CreditTrackerSettings {
private PipelineSettings pipeline;
@NestedConfigurationProperty
private FlagUpdaterSettings flagUpdater;
@NestedConfigurationProperty
private KafkaConsumerSettings kafkaConsumerSettings;
private String signalsRootUri;
private String signalsToken;

View file

@ -0,0 +1,11 @@
package ru.nbch.credit_tracker.config.settings;
public record KafkaConsumerSettings(
String topic,
String concurency,
String bootstrapServers,
String groupId,
String autoOffsetReset,
Integer maxPollRecords,
Integer maxPollIntervalMs
) {}

View file

@ -8,6 +8,7 @@ import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.kafka.annotation.KafkaListener;
import org.springframework.kafka.support.Acknowledgment;
import org.springframework.stereotype.Service;
import ru.nbch.credit_tracker.config.settings.CreditTrackerSettings;
import ru.nbch.credit_tracker.entities.app.Hit;
import ru.nbch.credit_tracker.entities.app.LegalsMap;
import ru.nbch.credit_tracker.entities.app.PhonesMap;
@ -34,9 +35,8 @@ import java.util.stream.Collectors;
@Service
public class KafkaMonitoringService {
private volatile boolean isShuttingdDown = false;
private final static String CONCURRENCY = "8";
private final static int PERMITS = Integer.parseInt(CONCURRENCY);
private final Semaphore processingPermits = new Semaphore(PERMITS); // количество равно concurency листенера
private final int permits;
private final Semaphore processingPermits;
private final BlockingQueue<SignalKafkaEvent> signalEventsQueue;
@ -47,16 +47,19 @@ public class KafkaMonitoringService {
public KafkaMonitoringService(@Qualifier("signalKafkaEventQueue") BlockingQueue<SignalKafkaEvent> signalEventsQueue,
PackageRecordsService packageRecordsService,
SourceService sourceService,
SegmentMapService segmentMapService) {
SegmentMapService segmentMapService,
CreditTrackerSettings settings) {
this.signalEventsQueue = signalEventsQueue;
this.packageRecordsService = packageRecordsService;
this.sourceService = sourceService;
this.segmentMapService = segmentMapService;
this.permits = Integer.parseInt(settings.getKafkaConsumerSettings().concurency()); // количество равно concurency листенера
this.processingPermits = new Semaphore(permits);
}
@KafkaListener(
topics = "my-topic",
concurrency = CONCURRENCY
topics = "#{@creditTrackerSettings.kafkaConsumerSettings.topic}",
concurrency = "#{@creditTrackerSettings.kafkaConsumerSettings.concurency}"
)
public void listen(List<PackageMessage> records,
Acknowledgment acknowledgment) {
@ -72,8 +75,9 @@ public class KafkaMonitoringService {
try {
acknowledgment.acknowledge();
long startTime = System.currentTimeMillis();
process(records);
log.info("Processed {} messages from Kafka", records.size());
log.info("Processed {} messages from Kafka. Time {} ms", records.size(), System.currentTimeMillis() - startTime);
} finally {
processingPermits.release();
}
@ -294,7 +298,7 @@ public class KafkaMonitoringService {
log.info("Stopping KafkaMonitoringService...");
isShuttingdDown = true;
processingPermits.acquire(PERMITS);
processingPermits.acquire(permits);
try {
SignalKafkaEvent rotateEvent = new SignalKafkaEvent();
@ -307,7 +311,7 @@ public class KafkaMonitoringService {
signalEventsQueue.put(stopEvent);
log.info("STOP event sent to queue");
} finally {
processingPermits.release(PERMITS);
processingPermits.release(permits);
}
log.info("KafkaMonitoringService stopped");

View file

@ -58,19 +58,11 @@
</select>
<select id="findByFids" resultMap="PhoneMap">
select id,
fid,
phone,
name_1,
first,
middle,
birth_dt,
ser_num,
id_type,
flag_debt5000,
flag_90_12,
searched_at,
calculated_at
select
fid,
phone,
flag_debt5000,
flag_90_12
FROM signals_phones_map
WHERE fid in
<foreach item='fid' collection='fids' open='(' separator=',' close=')'>