import lombok.SneakyThrows;
import io.github.fernanda.maia.model.Track;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.kafka.common.serialization.Serializer;
public class TrackSerializer implements Serializer<Track> {
@Override
@SneakyThrows
public byte[] serialize(String topic, Track track) {
ObjectMapper mapper = new ObjectMapper();
byte[] response = mapper.writeValueAsString(track).getBytes();
return response;
}
}
import io.github.fernanda.maia.model.Track;
import org.apache.kafka.clients.producer.KafkaProducer;
import org.apache.kafka.clients.producer.ProducerRecord;
import io.github.fernanda.maia.serializer.TrackSerializer;
import org.apache.kafka.common.serialization.StringSerializer;
import java.util.Properties;
public class TrackProducer {
public static void main(String[] args) {
Properties props = new Properties();
props.setProperty("bootstrap.servers", "localhost:9092");
props.setProperty("key.serializer", StringSerializer.class.getName());
props.setProperty("value.serializer", TrackSerializer.class.getName());
try(KafkaProducer<String, Track> producer = new
KafkaProducer<>(props)) {
Track data = new Track();
data.setId(1L);
data.setLatitude("22.576N");
data.setLongitude("88.3639E");
ProducerRecord<String, Track> record = new
ProducerRecord<>("TrackCSTopic", "coordinates", data);
producer.send(record);
} catch(Exception e) {
e.printStackTrace();
}
}
}
import lombok.SneakyThrows;
import io.github.fernanda.maia.model.Track;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.kafka.common.serialization.Deserializer;
public class TrackDeserializer implements Deserializer<Track> {
@Override
@SneakyThrows
public Track deserialize(String topic, byte[] data) {
Track response = null;
ObjectMapper mapper = new ObjectMapper();
response = mapper.readValue(data, Track.class);
return response;
}
}
import io.github.fernanda.maia.deserializer.TrackDeserializer;
import io.github.fernanda.maia.model.Track;
import org.apache.kafka.clients.consumer.ConsumerRecords;
import org.apache.kafka.clients.consumer.KafkaConsumer;
import org.apache.kafka.common.serialization.StringDeserializer;
import java.time.Duration;
import java.util.Properties;
import java.util.Collections;
public class TrackConsumer {
public static void main(String[] args) {
Properties props = new Properties();
props.setProperty("bootstrap.servers", "localhost:9092");
props.setProperty("key.deserializer",
StringDeserializer.class.getName());
props.setProperty("value.deserializer",
TrackDeserializer.class.getName());
props.setProperty("group.id", "TrackGroup");
KafkaConsumer<String, Track> consumer = new
KafkaConsumer<>(props);
consumer.subscribe(Collections.singletonList("TrackCSTopic"));
ConsumerRecords<String, Track> records =
consumer.poll(Duration.ofSeconds(20));
records.forEach(c -> {
System.out.println(c.key());
System.out.println("ID: " + c.value().getId());
System.out.println("Latitude: " + c.value().getLatitude());
System.out.println("Longitude: " + c.value().getLongitude());
});
consumer.close();
}
}