12 Bob 1 -185 -90 John 0 -1 90 Steve -180 0 180 Number X Y Z 1 1 0 0 2 1 -90 1 3 -180 0 180 4 1 90 -1 Eventos do Celular Números Achando o Número "3" Tempo
Cerca de 1.2 trilhões de mensagens por dia Milhares de streams de dados Fonte de todos os data warehouses & dados Hadoop Cerca de 300 bilhões de eventos de usuário por dia
Aplicações Não-Baseadas em Java Aplicações Baseadas em Java Schema Registry REST / HTTP Escala horizontalmente Simplifica a produção e consumo de registros Provê uma interface RESTful para o Kafka
JDBC Mongo MySQL Elastic Cassandra HDFS Kafka Connect API Kafka Pipeline Conector Conector Conector Conector Conector Conector Source s Sinks Tolerante a Falhas Centenas de Sources e Sinks pré- implementados Preserva o schema / DDL Parte do projeto Apache Kafka Integrado com o C3 (Confluent Control Center)
Architectures 51 The truth is the log. The database is a cache of a subset of the log. —Pat Helland Immutability Changes Everything http://cidrdb.org/cidr2015/Papers/CIDR15_Paper16.pdf
diferentes! alice San Francisco alice New York City alice Rio de Janeiro alice Sydney alice Beijing alice Paris alice Berlin Cenário 1: Status da Milhagem? Cenário 2: Localização Atual? ⚑ ⚑ ⚑ ⚑ ⚑ ⚑ ⚑ ⚑
diferentes! alice San Francisco alice New York City alice Rio de Janeiro alice Sydney alice Beijing alice Paris alice Berlin ⚑ ⚑ ⚑ ⚑ ⚑ ⚑ ⚑ ⚑ Cenário 1: Status da Milhagem? Cenário 2: Localização Atual?
diferentes! “Alice has been to SFO, NYC, Rio, Sydney, Beijing, Paris, and finally Berlin.” “Alice is in SFO, NYC, Rio, Sydney, Beijing, Paris, Berlin right now.” ⚑ ⚑ ⚑⚑ ⚑ ⚑ ⚑ ⚑ ⚑ ⚑⚑ ⚑ ⚑ ⚑ Cenário 1: Status da Milhagem? Cenário 2: Localização Atual? KStream KTable
Integer> input = builder.stream("numbers-topic"); // Stateless computation KStream<Integer, Integer> doubled = input.mapValues(v -> v * 2); // Stateful computation KTable<Integer, Integer> sumOfOdds = input .filter((k,v) -> v % 2 != 0) .selectKey((k, v) -> 1) .groupByKey() .reduce((v1, v2) -> v1 + v2, "sum-of-odds"); API preferida para maioria dos casos The DSL particularly appeals to users: • Familiar para desenvolvedores que vem de Apache Spark e Flink. • Bom também para quaquer pessoa que seja fâ de programação funcional
Processor<K, V> { @Override public void init(ProcessorContext context) {} @Override void process(K key, V value) { System.out.println("Received record with " + "key=" + key + " and value=" + value); } @Override void punctuate(long timestamp) {} @Override void close() {} } Mais flexibilidade = Mais Código! The Processor API appeals to users: • Familiar para desenvolvedores que vem de Apache Storm e Samza. • Interessante se requer alguma feature que ainda não está presenta na DSL.
fraudProbability > 0.8; • Escreva apenas SQL. Nada de Java, C++, Python ou coisas mais complexas. • Crie UDFs KSQL caso precise de lógicas mais complexas.