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é.
J'ai corrigé le problème précédent en utilisant le retour d'un numéro de partition valide.