Sobes.tech
Junior

Ce este un producător în Apache Kafka?

sobes.tech AI

Răspuns de la AI

Un producător în Apache Kafka este o aplicație client care publică mesaje în brokerii Kafka.

Funcții principale:

  1. Trimiterea mesajelor: Primește date și le trimite către topicul specificat.
  2. Serializare: Transformă datele mesajului în octeți înainte de trimitere.
  3. Particionare: Determină în ce partiție a topicului va fi trimis mesajul. În mod implicit, se folosește hash-ul cheii mesajului. Dacă nu există cheie, se folosește round-robin sau sticky partitioning.
  4. Bufferizare: Mesajele sunt temporar stocate într-un buffer înainte de a fi trimise în loturi, ceea ce crește capacitatea de throughput.
  5. Gestionarea erorilor: Se ocupă de încercările de retrimitere în caz de defecțiuni temporare sau erori ale brokerului.

Configurații importante:

  • bootstrap.servers: Lista de gazde și porturi ale brokerilor pentru conexiunea inițială.
  • key.serializer: Clasa pentru serializarea cheii mesajului.
  • value.serializer: Clasa pentru serializarea valorii mesajului.
  • acks: Nivelul de confirmare a primirii mesajelor de către brokeri (0, 1, all).
  • retries: Numărul de încercări de retrimitere a mesajului.
// Exemplu de trimitere a unui mesaj către Kafka folosind API-ul Producer în Java
Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092"); // Adresa brokerului
props.put("acks", "all"); // Solicită confirmarea de la toate replicile
props.put("retries", 0); // Fără încercări suplimentare
props.put("linger.ms", 1); // Trimite mesajele imediat
props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer"); // Serializator cheie
props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer"); // Serializator valoare

Producer<String, String> producer = new KafkaProducer<>(props);
for (int i = 0; i < 100; i++) {
    producer.send(new ProducerRecord<String, String>("my-topic", Integer.toString(i), Integer.toString(i))); // Trimitere mesaj
}

producer.close(); // Închiderea producătorului