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 # signal
ct.signal-data-source-settings.driver=org.postgresql.Driver 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.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.maximum-pool-size=${MAXIMUM_POOL_SIZE_SIGNAL:40}
ct.signal-data-source-settings.minimum-idle=${MINIMUM_IDLE_SIGNAL:10} ct.signal-data-source-settings.minimum-idle=${MINIMUM_IDLE_SIGNAL:10}
ct.signal-data-source-settings.connection-timeout=${CONNECTION_TIMEOUT_SIGNAL:10000} 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 ct.target.dir=D:\\folder_name\\signals\\tmpt
# min # min
ct.monitoring-interval=${MONITORING_INTERVAL:15} ct.monitoring-interval=${MONITORING_INTERVAL:5}
# days # days
ct.update-flags-cron-expression=${UPDATE_FLAGS_CRON_EXPRESSION:0 25 18 * * *} ct.update-flags-cron-expression=${UPDATE_FLAGS_CRON_EXPRESSION:0 25 18 * * *}
ct.new-flags-cron-expression=${NEW_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.update-fid-cron-expression=${UPDATE_FIDS_CRON_EXPRESSION:0 10 12 * * *}
ct.days-to-update-fids=${DAYS_TO_UPDATE_FIDS:30} 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.db-version=${DB_VERSION:1234}
ct.encoding=windows-1251 ct.encoding=windows-1251

View file

@ -75,6 +75,15 @@ MAX_LIFETIME_NBCH=1800000
KEEPALIVE_TIME_NBCH=0 KEEPALIVE_TIME_NBCH=0
LEAK_DETECTION_THRESHOLD_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 # размер в mb
ACCEPTED_XML_SIZE=1024 ACCEPTED_XML_SIZE=1024
ACCEPTED_ARCHIVE_SIZE=2048MB ACCEPTED_ARCHIVE_SIZE=2048MB

View file

@ -69,6 +69,13 @@ services:
- MAX_LIFETIME_NBCH=${MAX_LIFETIME_NBCH} - MAX_LIFETIME_NBCH=${MAX_LIFETIME_NBCH}
- KEEPALIVE_TIME_NBCH=${KEEPALIVE_TIME_NBCH} - KEEPALIVE_TIME_NBCH=${KEEPALIVE_TIME_NBCH}
- LEAK_DETECTION_THRESHOLD_NBCH=${LEAK_DETECTION_THRESHOLD_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_XML_SIZE=${ACCEPTED_XML_SIZE}
- ACCEPTED_ARCHIVE_SIZE=${ACCEPTED_ARCHIVE_SIZE} - ACCEPTED_ARCHIVE_SIZE=${ACCEPTED_ARCHIVE_SIZE}
- SIGNALS_ROOT_URI=${SIGNALS_ROOT_URI} - SIGNALS_ROOT_URI=${SIGNALS_ROOT_URI}
@ -164,6 +171,13 @@ services:
- MAX_LIFETIME_NBCH=${MAX_LIFETIME_NBCH} - MAX_LIFETIME_NBCH=${MAX_LIFETIME_NBCH}
- KEEPALIVE_TIME_NBCH=${KEEPALIVE_TIME_NBCH} - KEEPALIVE_TIME_NBCH=${KEEPALIVE_TIME_NBCH}
- LEAK_DETECTION_THRESHOLD_NBCH=${LEAK_DETECTION_THRESHOLD_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_ROOT_URI=${SIGNALS_ROOT_URI}
- SIGNALS_TOKEN=${SIGNALS_TOKEN} - SIGNALS_TOKEN=${SIGNALS_TOKEN}
- SIGNALS_USER=${SIGNALS_USER} - 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.listener.ContainerProperties;
import org.springframework.kafka.support.serializer.JsonDeserializer; import org.springframework.kafka.support.serializer.JsonDeserializer;
import ru.nbch.credit_tracker.config.settings.CreditTrackerSettings; 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.entities.external_request.kafka.PackageMessage;
import ru.nbch.credit_tracker.model.SignalKafkaEvent; import ru.nbch.credit_tracker.model.SignalKafkaEvent;
@ -42,12 +43,14 @@ public class KafkaConfig {
} }
@Bean @Bean
public ConsumerFactory<String, PackageMessage> consumerFactory() { public ConsumerFactory<String, PackageMessage> consumerFactory(CreditTrackerSettings settings) {
KafkaConsumerSettings kafkaSettings = settings.getKafkaConsumerSettings();
Map<String, Object> props = new HashMap<>(); Map<String, Object> props = new HashMap<>();
props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:29092"); props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, kafkaSettings.bootstrapServers());
props.put(ConsumerConfig.GROUP_ID_CONFIG, "credit-tracker"); props.put(ConsumerConfig.GROUP_ID_CONFIG, kafkaSettings.groupId());
props.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, "earliest"); props.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, kafkaSettings.autoOffsetReset());
props.put(ConsumerConfig.MAX_POLL_RECORDS_CONFIG, 20); 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<PackageMessage> jsonDeserializer = new JsonDeserializer<>(PackageMessage.class);
jsonDeserializer.addTrustedPackages("*"); jsonDeserializer.addTrustedPackages("*");

View file

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

View file

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