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

Cookpad and Kafka

Lewis Buckley
September 18, 2018

Cookpad and Kafka

Here I share how we got started with Kafka at Cookpad.

As seen at South West Ruby, Bristol, UK.

Lewis Buckley

September 18, 2018
Tweet

More Decks by Lewis Buckley

Other Decks in Programming

Transcript

  1. class Recipe < ApplicationRecord after_commit :generate_feed_items, on: %i(create update) after_unpublish

    :delete_feed_items after_unapprove :delete_feed_items def generate_feed_items FeedBuilder.new(self).build_all end end @lewispb Callbacks
  2. @lewispb “There are patterns that are less about the code

    and more about how the code is being written, by whom, and within which organization.” - DHH
  3. Messages activated cooksnap approved recipe bookmarked recipe deleted cooksnap deleted

    recipe dismissed cooksnap followed user liked recipe published cooksnap published recipe recipe visited unapproved recipe unbookmarked recipe unfollowed user unliked recipe unpublished recipe @lewispb
  4. Topics @lewispb Recipes activated cooksnap approved recipe bookmarked recipe deleted

    cooksnap deleted recipe dismissed cooksnap liked recipe published cooksnap published recipe unapproved recipe unbookmarked recipe unliked recipe unpublished recipe Users followed user unfollowed user Recipe Visits recipe visited
  5. Messages @lewispb { "key": "recipe 4946334", "type": "published recipe", "event

    time": “2018-06-01T15:54:39Z", "body": { "author id": 100, "recipe id": 4946334, "title": "My Awesome Recipe", "created at": "2018-06-01T15:54:39Z" } }
  6. @lewispb Rails producer # app/events/published_recipe_event.rb class PublishedRecipeEvent < RecipeEvent private

    def event_time recipe.published_at end end # app/events/application_event.rb class RecipeEvent < ApplicationEvent topic_name :recipes def initialize(recipe) @recipe = recipe end private ... end
  7. @lewispb GDPR user_signed_up {name: “Lewis”} user:1 user_changed_details {name: “Lewis”} user:1

    user_changed_details {name: “Lewis”} user:1 user_closed_account {} user:1