4. “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 Woolf
http://www.enterpriseintegrationpatterns.com/patterns/messaging/Introduction.html
6. 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 Kleppmann
https://martin.kleppmann.com/2016/01/29/event-sourcing-stream-proce
ssing-at-ddd-europe.html
Implementations: JMS/AMQP
7. 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)
8. 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 Kreps
https://engineering.linkedin.com/distributed-systems/log-what-every-software-engineer-should-know-about-real-time-datas-unifying
9. Logs everywhere
Có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 Kleppmann
https://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/
10. 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 Kreps
https://engineering.linkedin.com/distributed-systems/log-what-every-software-engineer-should-know-about-real-time-datas-unifying
http://milinda.pathirage.org/kappa-architecture.com/
11. 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 Kleppmann
https://martin.kleppmann.com/2016/01/29/event-sourcing-stream-process
ing-at-ddd-europe.html
Implementations:
Apache Kafka,
Amazon Kinesis,
Apache DistributedLog
(incubating)
14. 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
19. from Topics to Partitions
http://kafka.apache.org/documentation
20. from Partitions to Segments
https://www.confluent.io/apache-kafka-talk-series/deep-dive-into-apache-kafka/
https://www.confluent.io/apache-kafka-talk-series/
21. from Segments to Records
https://www.confluent.io/apache-kafka-talk-series/deep-dive-into-apache-kafka/
https://www.confluent.io/apache-kafka-talk-series/
23. Lab: Log Record
Record Structure: Key/Value
Serialization/Deserialization
Metadata: Offset/Timestamp
24. 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
26. 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 Junqueira
https://www.confluent.io/blog/distributed-consensus-reloaded-apache-zookeeper-and-replication-in-kafka/
27. 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 Hoover
https://www.confluent.io/apache-kafka-talk-series/Streaming-in-Practice-Putting-Kafka-in-Production/
28. Lab: Kafka Cluster
Scalability: Cluster and
Brokers
Topics: Partitions,
Replication, ISR
Cleaning up: Compaction and
Retention
29. Be careful with putting
data in Containers
https://twitter.com/waxzce/status/829420329177083904
38. Results
kafka_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 Hoover
https://engineering.linkedin.com/kafka/benchmarking-apache-kafka-2-million-writes-second-three-cheap-machines
40. ➔ 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
41. 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.
42. 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.
43. 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
44. Lab: Kafka
Consumer
Consumer Groups: Parallelism
Consumer Offsets: Control and
reprocessing
(https://jeqo.github.io/post/2017-01-31-kafka-rewind-consume
rs-offset/)
46. Kafka Streams API & Kafka Connector API
Unifying Stream Processing and Interactive Queries in Apache Kafka - Eno Thereska
https://www.confluent.io/blog/unifying-stream-processing-and-interactive-queries-in-apache-kafka/
57. 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