De Mensajería hacia Logs con Apache Kafka

59
messaging logs @apachekafka Jorge Quilcate Otoya @jeqo89

Transcript of De Mensajería hacia Logs con Apache Kafka

messaging → logs@apachekafka

Jorge Quilcate Otoya@jeqo89

About me

Jorge Quilcate Otoya

Back-end/Integration Developer

at Sysco Middleware

@jeqo89 | github.com/jeqo | jeqo.github.io

Contexto

“Tecnología que permite comunicación asíncrona…

Channels, también conocidos queues (colas), son la ruta lógica que conecta los programas y transmite los mensajes …

El remitente o producer (productor) es el programa que envía mensajes, escribiendo el mensaje en un canal

El receptor o consumer (consumidor) es el programa que recibe los mensajes, leyéndolo (y eliminandolo) del canal.”

Context: Messaging

Enterprise Integration Patterns - Gregor Hohpe and Bobby Woolfhttp://www.enterpriseintegrationpatterns.com/patterns/messaging/Introduction.html

Message Channels: Point-to-Point, Pub/Sub

Messaging use-case:

Job Queues

Fire and Forget

Store and Forward (a.k.a. Push Model)

Broker a cargo de la entrega confiable de mensajes

Event sourcing and stream processing at scale - Martin Kleppmannhttps://martin.kleppmann.com/2016/01/29/event-sourcing-stream-proce

ssing-at-ddd-europe.html

Implementations: JMS/AMQP

Messaging Challenges

Riesgo de mensajes Out-of-order cuando se re-intenta enviar un mensaje fallido

Riesgo de inconsistencia en distintos clientes (producers and/or consumers)

Context: Logs

Records (registros) son adjuntados al final del Log...

Cada Record tiene un Key (llave)…

Los Records están ordenados…

El Orden define la noción de “tiempo”...

El Contenido no es importante en este punto, podría ser cualquiera

… Registran que ha pasado y cuando.

The Log: What every software engineer should know about real-time data's unifying abstraction - Jay Krepshttps://engineering.linkedin.com/distributed-systems/log-what-every-software-engineer-should-know-about-real-time-datas-unifying

Logs everywhereCómo tu base de datos almacena información en disco de forma consistente?

Utiliza un log.

Cómo las réplicas de una base de datos sincronizan con otras réplicas?

Utiliza un log.

Cómo los datos una actividad quedan registrados en un sistema como Apache Kafka?

Utiliza un log.

Cómo la infraestructura de tu aplicación se mantendrá robusta a escala? Adivina cómo…

Using logs to build a solid data infrastructure (or why dual writes are a bad idea) - Martin Kleppmannhttps://www.confluent.io/blog/using-logs-to-build-a-solid-data-infrastructure-or-why-dual-writes-are-a-bad-idea/

https://www.confluent.io/blog/turning-the-database-inside-out-with-apache-samza/

Log-Centric Architecture (a.k.a. Kappa)

“Un sistema que asume un log externo está presente permite a los sistemas individuales abandonar una gran cantidad de complejidad y

confiar en el log compartido.”

The Log: What every software engineer should know about real-time data's unifying abstraction - Jay Krepshttps://engineering.linkedin.com/distributed-systems/log-what-every-software-engineer-should-know-about-real-time-datas-unifying

http://milinda.pathirage.org/kappa-architecture.com/

Logs use-case: Event Log

Pull Model

Ordered stream de Eventos

Consumers a cargo de obtener mensajes (poll)

Event sourcing and stream processing at scale - Martin Kleppmannhttps://martin.kleppmann.com/2016/01/29/event-sourcing-stream-process

ing-at-ddd-europe.html

Implementations: Apache Kafka, Amazon Kinesis,

Apache DistributedLog(incubating)

Solving Messaging Challenges with Logs

Orden y Reprocesamiento

Apache KafkaA Distributed Streaming Platform

Apache Kafka: Hechos

➔ Nació de la necesidad de resolver el problema de data pipeline en LinkedIn.

➔ Primeros use-cases: Recolectar métricas de sistemas y monitorear la actividad de usuarios.

2010: Open-sourced

2011: Apache project

2012: Graduated from incubator in October

2014: Confluent Inc. founded

Kafka: The Definitive Guide - Neha Narkhede, Gwen Shapira & Todd Palino

Apache Kafka: Use-cases

➔ Activity Tracking➔ Messaging➔ Metrics/Logging➔ Commit Log➔ Stream Processing➔ Cloud Adoption

Apache KafkaTour

(v0.10.2.0)

Log Records

Kafka Cluster

Kafka Producer API

Kafka Consumer API

Kafka Streams API

Kafka Connect API

Kafka ++

Kafka Core

Log Record

from Topics to Partitions

http://kafka.apache.org/documentation

Lab: Log RecordRecord Structure: Key/Value

Serialization/Deserialization

Metadata: Offset/Timestamp

Schema Evolution: Why Avro?

Reader’s schema y writer’s schema no requieren ser la misma

Forward/Backward compatibility

➔ Agregar/eliminar campos con valores por defector

➔ Tipo `null` explicito (no optional/required markers)

➔ Posible cambiar data types

➔ Posible cambiar nombres (i.e. alias)

Designing Data-Intensive Applications - Martin Kleppmann

Kafka Cluster

Servicio de Coordinación centralizado: consensus, group management, presence protocols, atomic broadcast

“Fuente de verdad” interno de Kafka

Usado para:

➔ Elección de Réplica Líder

➔ Sincronización réplicas (ISR)

➔ Y más

Kafka Topology: Why Zookeeper?

Distributed Consensus Reloaded: Apache Zookeeper and Replication in Kafka - Flavio Junqueirahttps://www.confluent.io/blog/distributed-consensus-reloaded-apache-zookeeper-and-replication-in-kafka/

Balance Availability and Consistency

Use case: Activity Tracking ➔ Retención: 3 días

➔ Más particiones

➔ Menor factor de replicación

➔ Disponibilidad es más importante

Use case: Inventory adjustments

➔ Retención: 6 meses

➔ Menos particiones

➔ Mayor factor de replicación

➔ Consistencia es más importante

Streaming in Practice: Putting Kafka in Production - Roger Hooverhttps://www.confluent.io/apache-kafka-talk-series/Streaming-in-Practice-Putting-Kafka-in-Production/

Lab: Kafka Cluster

Scalability: Cluster and Brokers

Topics: Partitions, Replication, ISR

Cleaning up: Compaction and Retention

Be careful with putting data in Containershttps://twitter.com/waxzce/status/829420329177083904

Kafka Clients API

Kafka Producer API

Batching and Compression

Acknowledgment: Latency vs Durability

Ack=0 → No network delay → some data loss

Acknowledgment: Latency vs Durability

Ack=1 → 1 network round-trip → few data loss

Acknowledgment: Latency vs Durability

Ack=all (-1) → 2 network round-trip → no data loss

(in combination with `min.insync.replicas`)

Lab: Kafka Producer

Batching and Compression

Acknowledgements

Resultskafka_producer_ack_zero_latency_sum/kafka_producer_ack_zero_latency_count

ack=0 => 0.05494 s.

kafka_producer_ack_one_latency_sum/kafka_producer_ack_one_latency_count

ack=1 => 0.06097 s.

kafka_producer_ack_all_latency_sum/kafka_producer_ack_all_latency_count

ack=* => 0.06375 s.

Benchmarking Apache Kafka: 2 million writes per second on 3 cheap machines- Roger Hooverhttps://engineering.linkedin.com/kafka/benchmarking-apache-kafka-2-million-writes-second-three-cheap-machines

Kafka Consumer API

➔ Consumer Groups as Logical Subscribers

➔ Offset by Consumer instance (group member)

➔ Consumer Groups as base of parallelism, with Partitions

➔ Ordering ensured by partition (+ keyed topics is normally enough)

Multiple Consumers

At-Most-Once Delivery

➔ Scenario

El proceso del consumo se ‘cae’ luego de guardar su posición pero antes de procesar el mensaje.

➔ Result

El proceso que retoma el procesamiento, empezará de la posición guardada, aún si algunos mensajes previos no han sido procesados.

At-Least-Once Delivery

➔ Scenario

El proceso de consumo se ‘cae’ luego de procesar los mensajes, pero antes de guardar su posición.

➔ Result

Cuando el nuevo proceso retoma el procesamiento, los primeros mensajes que reciba pueden ya haber sido procesados.

Exactly-Once Delivery

“Exactly-once delivery require de la cooperación con el sistema de almacenamiento de destino …”

Próximamente (KIP-98):

● Idempotent Producer Guarantees● Transactional Guarantees

Lab: Kafka Consumer

Consumer Groups: Parallelism

Consumer Offsets: Control and reprocessing (https://jeqo.github.io/post/2017-01-31-kafka-rewind-consume

rs-offset/)

Kafka Streams API &Kafka Connector API

Kafka Streams API & Kafka Connector API

Unifying Stream Processing and Interactive Queries in Apache Kafka - Eno Thereskahttps://www.confluent.io/blog/unifying-stream-processing-and-interactive-queries-in-apache-kafka/

Kafka Connect

HDFS, JDBC, GoldenGate, Elasticsearch, Couchbase, DataStax, Cassandra, Attunity, Azure IoTHub, SAP Hana, VoltDb, FTP, JMS, JMX, MongoDB, Solr, Splunk, RethinkDB, SQS, S3, MQTT, Redis, InfluxDB, HBase, Hazelcast, Twitter, and more...

Lab: Kafka Streams & Kafka

Connector“Simplified Consumer”

Stream/Table Duality

Windows

Kafka++

Confluent Platform

Confluent Platform: Apache Kafka Enterprise Edition

Lab: Confluent Platform

Confluent Platform:

➔ Schema Registry➔ REST API

Integración con Apache Kafka

Lab: Integración con Kafka

Integration Platforms:

➔ Camel

http://camel.apache.org/kafka.html

➔ Akka Streamshttp://doc.akka.io/docs/akka-stream-kafka/current/home.html

➔ Oracle Service Bushttp://www.ateam-oracle.com/osb-transport-for-apache-kafka-part-1/

What’s in discussion and/or

coming soon?

Exactly-once Delivery / Txn Messaging

https://cwiki.apache.org/confluence/display/KAFKA/KIP-98+-+Exactly+Once+Delivery+and+Transactional+Messaging

Headers support (additional metadata)

https://cwiki.apache.org/confluence/display/KAFKA/KIP-82+-+Add+Record+Headers

ZStandard Compression support

https://cwiki.apache.org/confluence/display/KAFKA/KIP-110%3A+Add+C

odec+for+ZStandard+Compression

Reset Offset tool

https://cwiki.apache.org/confluence/display/KAFKA/KIP-122%3A+Add+a

+tool+to+Reset+Consumer+Group+Offsets

https://cwiki.apache.org/confluence/display/KAFKA/Kafka+Improvement+Proposals

How NOT to use Kafka

Top 5:

➔ No consideration of data on the inside vs outside

➔ Schema not externally defined

➔ Same config for every clients/topics

➔ 128 partitions as default➔ Running on 8 overloaded

nodes

Kafka Summit 2016: 101 ways to config Kafka - Badly

https://www.confluent.io/kafka-summit-2016-101-ways-to-configure-kafka-badly

https://cwiki.apache.org/confluence/display/KAFKA/Operations

Further reading