Upgrade to Pro — share decks privately, control downloads, hide ads and more …

De Mensajería hacia Logs con Apache Kafka - Per...

De Mensajería hacia Logs con Apache Kafka - PeruJUG

Presentado a la comunidad de Perú JUG: https://www.youtube.com/watch?v=gZCzD5bCdBA

Jorge Quilcate

February 16, 2017
Tweet

More Decks by Jorge Quilcate

Other Decks in Technology

Transcript

  1. “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
  2. 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
  3. 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)
  4. 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
  5. 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/
  6. 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/
  7. 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)
  8. 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
  9. Apache Kafka: Use-cases ➔ Activity Tracking ➔ Messaging ➔ Metrics/Logging

    ➔ Commit Log ➔ Stream Processing ➔ Cloud Adoption
  10. Apache Kafka Tour (v0.10.2.0) Log Records Kafka Cluster Kafka Producer

    API Kafka Consumer API Kafka Streams API Kafka Connect API Kafka ++
  11. 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
  12. 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/
  13. 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/
  14. Acknowledgment: Latency vs Durability Ack=all (-1) → 2 network round-trip

    → no data loss (in combination with `min.insync.replicas`)
  15. 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
  16. ➔ 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
  17. 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.
  18. 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.
  19. 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
  20. Lab: Kafka Consumer Consumer Groups: Parallelism Consumer Offsets: Control and

    reprocessing (https://jeqo.github.io/post/2017-01-31-kafka-rewind-consume rs-offset/)
  21. 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/
  22. 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...
  23. Lab: Integración con Kafka Integration Platforms: ➔ Camel http://camel.apache.org/kafka.html ➔

    Akka Streams http://doc.akka.io/docs/akka-stream-kafka/current/home.html ➔ Oracle Service Bus http://www.ateam-oracle.com/osb-transport-for-apache-kafka-part-1/
  24. 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+Rec ord+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
  25. 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