web-dev-qa-db-fra.com

Comment réparer KAFKA.COMMON.Errors.TimeoutException: Expiration 1 Enregistrement (s) XXX MS a passé depuis la création par lots plus le temps d'attentat

J'utilise kafka_2.11-2.1.1 et producteur à l'aide du ressort 2.1.0.Release.

J'utilise le ressort pendant que j'envoie les messages à Kafka sujet mon producteur génère beaucoup de TimeoutExceptions

org.Apache.kafka.common.errors.TimeoutException: Expiring 1 record(s) for COMPANY_INBOUND--19: 229 ms has passed since batch creation plus linger time

J'utilise ci-dessous kafka Paramètres du producteur

acks: 1
retries: 1
batchSize: 100
lingerMs: 5
bufferMemory: 33554432
requestTimeoutMs: 60

J'ai essayé de nombreuses combinaisons (spécialement batchSize & lingerMs) mais rien n'a fonctionné. Toute aide s'il vous plaît ce qui devrait être le paramètre de scénario ci-dessus.

Essayé à nouveau avec des configurations ci-dessous ... mais pas de chance la même erreur

acks = 1
    batch.size = 15
    buffer.memory = 33554432
    client.id = 
    compression.type = none
    connections.max.idle.ms = 540000
    enable.idempotence = false
    interceptor.classes = []
    key.serializer = class org.Apache.kafka.common.serialization.StringSerializer
    linger.ms = 0
    max.block.ms = 60000
    max.in.flight.requests.per.connection = 5
    max.request.size = 1048576
    metadata.max.age.ms = 300000
    metric.reporters = []
    metrics.num.samples = 2
    metrics.recording.level = INFO
    metrics.sample.window.ms = 30000
    partitioner.class = class com.spgmi.ca.prescore.partition.CompanyInfoPartitioner
    receive.buffer.bytes = 32768
    reconnect.backoff.max.ms = 1000
    reconnect.backoff.ms = 50
    request.timeout.ms = 120
    retries = 1

Deuxième exécution :

J'ai des combinaisons différentes de différentes combinaisons. Par conséquent, je pensais que ce serait un problème avec le réseau, le SSL, etc., donc j'ai installé et exécuté le Kafka sur la même machine où le producteur est en cours d'exécution I.e. Dans mon ordinateur local.

J'ai essayé d'exécuter à nouveau le producteur pointant vers la locale Kafka sujets. Mais sans chance la même question.

Vous trouverez ci-dessous des paramètres de configuration utilisés.

2019-07-02 05:55:36.663  INFO 9224 --- [lt-dispatcher-2] o.a.k.clients.producer.ProducerConfig    : ProducerConfig values: 
    acks = 1
    batch.size = 0
    bootstrap.servers = [localhost:9092]
    request.timeout.ms = 60
    retries = 1
    buffer.memory = 33554432
    linger.ms = 0
    client.id = 
    compression.type = none
    connections.max.idle.ms = 540000
    enable.idempotence = false
    interceptor.classes = []
    max.block.ms = 60000
    max.in.flight.requests.per.connection = 5
    max.request.size = 1048576
    metadata.max.age.ms = 300000
    metric.reporters = []
    metrics.num.samples = 2
    metrics.recording.level = INFO
    metrics.sample.window.ms = 30000
    receive.buffer.bytes = 32768
    reconnect.backoff.max.ms = 1000
    reconnect.backoff.ms = 50
    retry.backoff.ms = 100
    sasl.client.callback.handler.class = null
    sasl.jaas.config = null
    sasl.kerberos.kinit.cmd = /usr/bin/kinit
    sasl.kerberos.min.time.before.relogin = 60000
    sasl.kerberos.service.name = null
    sasl.kerberos.ticket.renew.jitter = 0.05
    sasl.kerberos.ticket.renew.window.factor = 0.8
    sasl.login.callback.handler.class = null
    sasl.login.class = null
    sasl.login.refresh.buffer.seconds = 300
    sasl.login.refresh.min.period.seconds = 60
    sasl.login.refresh.window.factor = 0.8
    sasl.login.refresh.window.jitter = 0.05
    sasl.mechanism = GSSAPI
    security.protocol = PLAINTEXT
    send.buffer.bytes = 131072
    ssl.cipher.suites = null
    ssl.enabled.protocols = [TLSv1.2, TLSv1.1, TLSv1]
    ssl.endpoint.identification.algorithm = https
    ssl.key.password = null
    ssl.keymanager.algorithm = SunX509
    ssl.keystore.location = null
    ssl.keystore.password = null
    ssl.keystore.type = JKS
    ssl.protocol = TLS
    ssl.provider = null
    ssl.secure.random.implementation = null
    ssl.trustmanager.algorithm = PKIX
    ssl.truststore.location = null
    ssl.truststore.password = null
    ssl.truststore.type = JKS
    transaction.timeout.ms = 60000
    transactional.id = null

face à la même erreur : org.apache.kafka.ca.Errors.TimeoutException: expiration 1 record (s) pour Inbound_Topic - 1: 69 ms a passé depuis la création de lots plus le temps de l'attard

Aussi essayé 5, 10 & 0 linger_ms 0, 5, 10 etc. request_time_out 0, 45, 60, 120, 300 etc.

Rien de travail ... même erreur.

Que devrais-je essayer d'autre, quelle pourrait être la solution?

Comment éviter la génération de clé négative

Ouais je configurais la configuration locale et imprimez le journal avec une info partition qui montre comme ci-dessous

2019-07-03 02: 48: 28.822 Info 7092 --- [LT-Dispatcher-2] CSCPPCompanyinFopartitioner: Topic: Inbound_Topic Key = 597736248- Entropie Cayman Solar Ltd.-Null-Null-Null partition = - 1 2019-07-03 02: 48: 28.931 Erreur 7092 --- [ad | Producteur-1] Osksupport.loggingProducerListener: Exception levée lors de l'envoi d'un message avec Key = '597736248- Entropie Cayman Solar Ltd.-Null-Null-Null' et Pay Charad='Com.spgmi.ca.prescore.model.company@8b12343 'Topic Inbound_Topic:

org.apache.kafka.common.errors.timeoutException: expiration 1 record (s) pour Inbound_Topic --1: 104 ms s'est écoulé depuis la création de lots plus le temps de l'attard

Mes sujets Inbound_topic a deux partitions que vous voyez ci-dessous C:\logiciel\kafka\kafka_2.11-2.1.1\bin\windows> kafka-topics.bat --describe --zookeeper localhost: 2181 --Topic Inbound_Topic Sujet: Inbound_Topic PartitionCount: 2 ReplicationFacteur: 1 Configs: Sujet: Inbound_Topic Partition: 0 Leader: 0 Réplique: 0 ISR: 0 Topic: Inbound_Topic Partition: 1 Leader: 0 Réplicas: 0 ISR: 0

Mais mon producteur semble essayer d'envoyer à la partition = -1

Ma logique de partition est comme ci-dessous

int p = (((String)key).hashCode() * Integer.MAX_VALUE) % numPartitions;
        logger.info("Topic : "+ topic + "\t Key = " + (String)key + " Partition = " + p );

Sur la clé, je fais hashcode (). Quel besoin d'être corrigé ici pour éviter ce numéro de partition numérique négatif? I.e. partition = -1

Quelle devrait être ma logique clé de partition comme?

anyhelp fortement apprécié.

6
BdEngineer

J'ai corrigé le problème précédent en utilisant le retour d'un numéro de partition valide.

1
BdEngineer