<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Deb</title>
    <description>The latest articles on Forem by Deb (@debadyuti).</description>
    <link>https://forem.com/debadyuti</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1208801%2F825a19d1-1f09-4ba2-b6d5-00e1284d0521.png</url>
      <title>Forem: Deb</title>
      <link>https://forem.com/debadyuti</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/debadyuti"/>
    <language>en</language>
    <item>
      <title>Streaming SQL in Stateful DataFlows</title>
      <dc:creator>Deb</dc:creator>
      <pubDate>Sat, 22 Feb 2025 22:37:35 +0000</pubDate>
      <link>https://forem.com/debadyuti/streaming-sql-in-stateful-dataflows-3jng</link>
      <guid>https://forem.com/debadyuti/streaming-sql-in-stateful-dataflows-3jng</guid>
      <description>&lt;h2&gt;
  
  
  Streaming SQL Functionality
&lt;/h2&gt;

&lt;p&gt;SQL Streaming Queries and Stream Processing Operations is released in Stateful DataFlow Beta 7 running on Fluvio 0.15.2&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;With SQL Streaming on Stateful DataFlow you can:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Run ad-hoc queries on saved state objects and materialized views based live event streams.&lt;/li&gt;
&lt;li&gt;Use SQL queries to run stream processing operations in data flows.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For those who are not aware of Fluvio or Stateful DataFlow yet:&lt;/p&gt;

&lt;p&gt;Fluvio - Open Source distributed streaming engine written in Rust.&lt;br&gt;
Git Repo - &lt;a href="https://github.com/infinyon/fluvio" rel="noopener noreferrer"&gt;https://github.com/infinyon/fluvio&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Stateful DataFlow - Stream processing layer built on Fluvio built using the wasm component model.&lt;/p&gt;

&lt;p&gt;Example projects to try on your machine - &lt;a href="https://github.com/infinyon/stateful-dataflows-examples/" rel="noopener noreferrer"&gt;https://github.com/infinyon/stateful-dataflows-examples/&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  SQL: From Static Tables to Streaming Data
&lt;/h2&gt;

&lt;p&gt;Remember when SQL was the only way to talk to your data? It wasn't just a query language - it was &lt;em&gt;the&lt;/em&gt; query language. But its story goes deeper than syntax.&lt;/p&gt;
&lt;h3&gt;
  
  
  The Universal Language of Data
&lt;/h3&gt;

&lt;p&gt;Just as merchants in medieval Mediterranean ports needed a shared language to trade (that's where "lingua franca" came from), the tech world needed SQL to make data accessible across different systems and teams.&lt;/p&gt;

&lt;p&gt;If you're in a room with a DBA, a data analyst, and a business analyst. What's the one language they all speak? Likely SQL.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;product_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;COUNT&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;orders&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;sales&lt;/span&gt;
&lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;region&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'EMEA'&lt;/span&gt;
&lt;span class="k"&gt;GROUP&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;product_name&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Look familiar? Whether you're running Oracle, Postgres, or MySQL, this just works. Well sort of!&lt;/p&gt;

&lt;h3&gt;
  
  
  Why SQL Still Matters
&lt;/h3&gt;

&lt;p&gt;Three key factors made SQL a long-term utility that stood the test of time:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;It's Human-Friendly&lt;/strong&gt;&lt;br&gt;
Instead of telling machines HOW to get data, you just say WHAT you want. &lt;code&gt;SELECT * FROM users WHERE status = 'active'&lt;/code&gt; reads almost like English.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;It's Everywhere&lt;/strong&gt;&lt;br&gt;
From startups to Fortune 500s, SQL skills travel. Write once, run anywhere - from healthcare to fintech.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;It Just Works&lt;/strong&gt;&lt;br&gt;
Need to analyze sales data? Track user behavior? SQL's got you covered, backed by decades of tooling and optimization.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  The Real-Time Challenge
&lt;/h3&gt;

&lt;p&gt;In a world of Artificial Intelligence, Web3, and global markets, event streaming is no longer a luxury - it's a basic need. Ask yourself:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Is your application combining data from multiple sources in real-time?&lt;/li&gt;
&lt;li&gt;Are your customers happy with stale insights?&lt;/li&gt;
&lt;li&gt;Do you need fresh data on demand?&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Bridging Static and Streaming
&lt;/h3&gt;

&lt;p&gt;What if you could use familiar SQL syntax for real-time data processing? What if your team could leverage their existing SQL skills for stream processing?&lt;/p&gt;

&lt;p&gt;We've been exploring these questions and implementing solutions that bring SQL's simplicity to streaming data. Want to see how? Check out the full article where we dive into:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Practical examples using NY Transit data&lt;/li&gt;
&lt;li&gt;Real-world streaming SQL queries in action&lt;/li&gt;
&lt;li&gt;How to implement stream processing without learning a new language&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Longer article on &lt;a href="https://infinyon.com/blog/2025/02/streaming-sql/" rel="noopener noreferrer"&gt;InfinyOn blog&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>sql</category>
      <category>rust</category>
      <category>distributedsystems</category>
      <category>dataengineering</category>
    </item>
    <item>
      <title>5 Learnings from sharing Kafka vs Fluvio Benchmarks on Reddit</title>
      <dc:creator>Deb</dc:creator>
      <pubDate>Fri, 14 Feb 2025 00:22:53 +0000</pubDate>
      <link>https://forem.com/debadyuti/5-learnings-from-sharing-kafka-vs-fluvio-benchmarks-on-reddit-34</link>
      <guid>https://forem.com/debadyuti/5-learnings-from-sharing-kafka-vs-fluvio-benchmarks-on-reddit-34</guid>
      <description>&lt;p&gt;To have a readable blog, all the links are at the bottom except the link to the Fluvio project.&lt;/p&gt;

&lt;h1&gt;
  
  
  Benchmarking Fluvio: Community Insights and the Future of Streaming
&lt;/h1&gt;

&lt;p&gt;Yesterday, I shared a blog on benchmarking results comparing Fluvio, our next-generation streaming engine, with Apache Kafka. &lt;/p&gt;

&lt;p&gt;The response from the Rust community was encouraging, with over 30,000 impressions, 80+ upvotes, and 40+ comments in just 24 hours. The feedback was invaluable, and I want to share the 5 things I learned from all the developer feedback.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Fluvio?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/infinyon/fluvio" rel="noopener noreferrer"&gt;Fluvio&lt;/a&gt; is a distributed streaming engine built in Rust over the past six years. While it follows Apache Kafka's conceptual patterns, it introduces programmable design patterns through Rust and WebAssembly-based stream processing called Stateful DataFlow (SDF). This makes Fluvio a complete platform for event streaming.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Community Insights
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Developers care a lot about the benchmark environment.
&lt;/h3&gt;

&lt;p&gt;The community emphasized the importance of comprehensive testing environments:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Need for bare metal servers to eliminate virtualization artifacts&lt;/li&gt;
&lt;li&gt;Production-grade setups with proper replication (factor of 3)&lt;/li&gt;
&lt;li&gt;Large-scale validation with terabyte-scale live data&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The ideal benchmarks will be using real-world data from Blockchain, High-Frequency Trading, or Ad-Tech on bare metal servers and compare multiple systems like Kafka, RedPanda, Pulsar.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Intelligent developers know about the trade-offs of using different hardware.
&lt;/h3&gt;

&lt;p&gt;Developers highlighted several hardware-specific considerations:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ARM Graviton chips' latency variations in virtualized environments&lt;/li&gt;
&lt;li&gt;Importance of testing across different CPU architectures including x86&lt;/li&gt;
&lt;li&gt;Thermal throttling differences between consumer laptops and server-grade hardware&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Seasoned developers want production-ready configuration for each solution being configured
&lt;/h3&gt;

&lt;p&gt;Runtime mechanics need to reflect real-world scenarios:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Specific JVM and Garbage Collector configurations for Kafka benchmarking&lt;/li&gt;
&lt;li&gt;Resource utilization patterns under various loads&lt;/li&gt;
&lt;li&gt;Multi-node deployment testing at scale&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. While benchmarks are great benchmarking in mature categories require mention of table-stakes features
&lt;/h3&gt;

&lt;p&gt;Key functionality developers look for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Consumer groups for ordered delivery per partition&lt;/li&gt;
&lt;li&gt;Stream and batch processing capabilities&lt;/li&gt;
&lt;li&gt;Robust delivery guarantees&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  5. Benchmarks also immediately makes developers think of reliability and debugging experience
&lt;/h3&gt;

&lt;p&gt;Critical operational features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dead letter queue implementations&lt;/li&gt;
&lt;li&gt;Retry strategies for network issues&lt;/li&gt;
&lt;li&gt;Delivery proof mechanisms beyond best-effort&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The New Streaming Paradigm
&lt;/h2&gt;

&lt;p&gt;Event streaming is a basic pattern in a world filled with agents.&lt;/p&gt;

&lt;p&gt;Wise developers focus on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Practical performance over theoretical maxima&lt;/li&gt;
&lt;li&gt;Transparent benchmarking methodology&lt;/li&gt;
&lt;li&gt;Intuitive deployment and management&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Our Vision for Next Generation Data Intensive Applications
&lt;/h2&gt;

&lt;p&gt;We believe the next wave of intelligent applications will come from builders who:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Challenge traditional infrastructure assumptions&lt;/li&gt;
&lt;li&gt;Require millisecond latencies at scale&lt;/li&gt;
&lt;li&gt;Prioritize resource efficiency&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We don't just need faster systems - we need smarter ones that don't drain budgets or sanity.&lt;/p&gt;

&lt;p&gt;The future belongs to systems that balance raw performance with operational wisdom. The question isn't just about speed—it's about enabling rapid innovation delivering an intuitive developer ergonomics while maintaining efficiency and reliability.&lt;/p&gt;

&lt;h2&gt;
  
  
  Get Involved
&lt;/h2&gt;

&lt;p&gt;Explore Fluvio:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Star our &lt;a href="https://github.com/infinyon/fluvio" rel="noopener noreferrer"&gt;GitHub repository&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Share with your friends&lt;/li&gt;
&lt;li&gt;Try our Rust-core development&lt;/li&gt;
&lt;li&gt;Experiment with our WASM based programmability&lt;/li&gt;
&lt;li&gt;Check out &lt;a href="https://infinyon.cloud" rel="noopener noreferrer"&gt;InfinyOn Cloud&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Read More:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://infinyon.com/blog/2025/02/kafka-vs-fluvio-bench/" rel="noopener noreferrer"&gt;Detailed Benchmark Results&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.reddit.com/r/rust/comments/1invl4e/apache_kafka_vs_fluvio_benchmarks/" rel="noopener noreferrer"&gt;Reddit Discussion&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>rust</category>
      <category>eventdriven</category>
      <category>distributedsystems</category>
      <category>bench</category>
    </item>
    <item>
      <title>How to build self hosted Github Stargazer Bots on Discord and Slack using Fluvio.</title>
      <dc:creator>Deb</dc:creator>
      <pubDate>Sat, 27 Jan 2024 05:56:51 +0000</pubDate>
      <link>https://forem.com/debadyuti/how-to-use-fluvio-to-build-self-hosted-github-stargazer-bots-on-discord-and-slack-38f5</link>
      <guid>https://forem.com/debadyuti/how-to-use-fluvio-to-build-self-hosted-github-stargazer-bots-on-discord-and-slack-38f5</guid>
      <description>&lt;h2&gt;
  
  
  Introduction &lt;a&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;This is my first article of 2024. Happy New Year to all of you.&lt;/p&gt;

&lt;p&gt;I have to begin with a confession. I planned to put this article out more than month ago as a Christmas present. But I was spread too thin. Wearing multiple hats.&lt;/p&gt;

&lt;p&gt;While this did not end up as the holiday present that I wanted to share with the open source community, I hope that it is welcome present in early 2024.&lt;/p&gt;

&lt;p&gt;Github activity is near and dear to open source project owners and power users. It is motivating for me to see continuous streams of stars and forks activity. 🤩&lt;/p&gt;

&lt;p&gt;In this blog, I will share my workflow to build a simple streaming data pipeline using Fluvio to collect and aggregate Star 🌟 and Fork 🎏 activity from GitHub, and build bots on Slack and/or discord to send automated updates on the Star and Fork changes.&lt;/p&gt;




&lt;h2&gt;
  
  
  Navigation &lt;a&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  About Fluvio
&lt;/h3&gt;

&lt;p&gt;Fluvio Open Source&lt;br&gt;
Configurations&lt;br&gt;
Pick the workflow that is relevant to you.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Shortcut:&lt;/em&gt;&lt;/strong&gt; All the files, configs, and the commands in the blog are in this &lt;a href="https://github.com/drc-infinyon/fluvio-experiments/tree/main/github-stargazer-local"&gt;Git Repository&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Workflow
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Fluvio Local Setup - Self Hosted&lt;/li&gt;
&lt;li&gt;API Keys and Secrets&lt;/li&gt;
&lt;li&gt;Inbound GitHub Connector&lt;/li&gt;
&lt;li&gt;Outbound Discord Connector&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Outbound Slack Connector&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;h3&gt;
  
  
  Fluvio Docs Reference &lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Fluvio Docs Reference&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;


&lt;h3&gt;
  
  
  Fluvio Open Source &lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/infinyon/fluvio"&gt;Fluvio&lt;/a&gt; is a data streaming system written in rust and web assembly. We have been building Fluvio for nearly 5 years. Fluvio is built as a cloud native distributed streaming system from the ground up. We are building ferociously to release stateful stream processing and time window based materializations with support for several web assembly compatible languages soon!&lt;/p&gt;

&lt;p&gt;We have been tracking various GitHub activities including Stars and Forks on our &lt;a href="https://github.com/infinyon/fluvio"&gt;Fluvio Open Source&lt;/a&gt; repository using Fluvio. We have channels on our company Slack and community Discord where we get continuous and real-time alerts on Star 🌟 and Fork 🎏 activity.&lt;/p&gt;

&lt;p&gt;Of course you can get a lot more than stars and forks:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If you would like a full blown GitHub Dashboard that you can implement, ask for it in the comments and I will open source it if folks want it.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Following this blog, you will have your very own streaming data pipeline to get Star 🌟 and Fork 🎏 activity on your own Slack or Discord channel. Let's go!&lt;/p&gt;
&lt;h3&gt;
  
  
  Configurations &lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Fluvio Cluster Deployment:&lt;/strong&gt; This tutorial will show you how to self host everything locally. In another tutorial, I will share this workflow using our managed cloud if you'd like to try that flow.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub API:&lt;/strong&gt; The inbound data comes from the GitHub API and you will need your GitHub API Key to get higher query limits.&lt;/p&gt;

&lt;p&gt;As per GitHub docs, GitHub Apps authenticating with an installation access token use the installation's minimum rate limit of 5,000 requests per hour. If the installation is on a GitHub Enterprise Cloud organization, the installation has a rate limit of 15,000 requests per hour.&lt;/p&gt;

&lt;p&gt;If there is no access token then you would be limited to 60 requests per hour. The default config of this blog will assume a slower frequency to work without the access token.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SlackBot / DiscordBot:&lt;/strong&gt; In terms of the bots sending you updates, you can have them run on Discord or Slack or both. For the bots there is a pretty simple workflow to create applications to interact with the Slack and Discord APIs. I will share the relevant workflow in this blog and provide references for the official docs at the bottom of the post.&lt;/p&gt;


&lt;h3&gt;
  
  
  Fluvio Local Setup - Self Hosted &lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;
&lt;h4&gt;
  
  
  Install and launch Fluvio
&lt;/h4&gt;

&lt;p&gt;Fluvio installation is managed by Fluvio Version Manager shortened to &lt;em&gt;fvm&lt;/em&gt;. To install Fluvio run the command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-fsS&lt;/span&gt; https://hub.infinyon.cloud/install/install.sh | bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Copy and run the last line of the install log on the terminal to add the install directory to the PATH variable.&lt;/p&gt;

&lt;h4&gt;
  
  
  Start a local Fluvio cluster
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;fluvio cluster start
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once the cluster is running you will need to download the connectors and the smart modules. I linked to organize them in a single working directory.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;mkdir &lt;/span&gt;github-stargazer-local &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;cd&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$_&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Create a free account on InfinyOn Cloud
&lt;/h4&gt;

&lt;p&gt;InfinyOn Cloud Hub is a repository of pre-built connectors, smartmodules and other workflow components.&lt;/p&gt;

&lt;p&gt;Create a free account using the &lt;a href="https://infinyon.cloud"&gt;InfinyOn Cloud sign-up page&lt;/a&gt; to access the &lt;a href="https://infinyon.cloud/hub"&gt;InfinyOn Hub&lt;/a&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  Download connectors
&lt;/h4&gt;

&lt;p&gt;We have full blown development kit to build connection or integration to practically any custom data source or sink. For this workflow we will use a couple of prebuilt connectors to accomplish our task.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Search available connectors:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;cdk hub list
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;You would see output like this:&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  CONNECTOR                          Visibility
  infinyon-labs/graphite-sink@0.1.2  public
  infinyon/duckdb-sink@0.1.0         public
  infinyon/http-sink@0.2.6           public
  infinyon/http-source@0.3.1         public
  infinyon/ic-webhook-source@0.1.2   public
  infinyon/kafka-sink@0.2.7          public
  infinyon/kafka-source@0.2.5        public
  infinyon/mqtt-source@0.2.5         public
  infinyon/sql-sink@0.3.3            public
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Download the http source and sink connectors:&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;http source&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;cdk hub download infinyon/http-source@0.3.1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;http sink&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;cdk hub download infinyon/http-sink@0.2.6
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Download smart modules
&lt;/h4&gt;

&lt;p&gt;Smart Modules are web assembly based data transformers. Similar to connectors, We have full blown development kit to build custom data transformation logic. In this case we will use a couple of prebuilt smart modules.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Search available smart modules:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;fluvio hub sm list
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;You would see output like this:&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  SMARTMODULE                              Visibility
  infinyon-labs/array-map-json@0.1.0       public
  infinyon-labs/dedup-filter@0.0.2         public
  infinyon-labs/json-formatter@0.1.0       public
  infinyon-labs/key-gen-json@0.1.0         public
  infinyon-labs/regex-map-json@0.1.1       public
  infinyon-labs/regex-map@0.1.0            public
  infinyon-labs/rss-json@0.1.0             public
  infinyon-labs/stars-forks-changes@0.1.2  public
  infinyon/jolt@0.3.0                      public
  infinyon/json-sql@0.2.1                  public
  infinyon/regex-filter@0.1.0              public
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Download the stars-forks-changes and jolt smart modules:&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;stars-forks-changes&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;fluvio hub sm download infinyon-labs/stars-forks-changes@0.1.2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;jolt&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;fluvio hub sm download infinyon/jolt@0.3.0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's all you will need for setup. Topics will be created automatically by the connectors.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;If you want to remove the fluvio cluster at any point shutdown the connectors(command in the sections below)&lt;/em&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;fluvio cluster delete
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Back to Navigation&lt;/p&gt;




&lt;h3&gt;
  
  
  Apps and API Keys: &lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;We will store the API Keys and secrets in a file for self hosted deployment.&lt;/p&gt;

&lt;p&gt;Create a file named &lt;strong&gt;secrets.txt&lt;/strong&gt; to add the relevant API Keys once we create them.&lt;/p&gt;

&lt;p&gt;Create the file using your favourite text editor and add the following variables.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;DISCORD_TOKEN=
SLACK_TOKEN=
GITHUB_TOKEN=
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Back to Navigation&lt;/p&gt;




&lt;h3&gt;
  
  
  Inbound GitHub Connector &lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;To connect to the GitHub API, you can create an API key based on the documentation here: &lt;a href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens"&gt;https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Create a file and call it &lt;strong&gt;github.yaml&lt;/strong&gt; with the following configuration pattern:&lt;br&gt;
You need to put the API endpoint of your repository, and modify the interval. If you use an API Key you can make it 1s, without an API Key you can go as fast as 60s intervals or more. I am keeping it at 120s.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;apiVersion&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;0.1.0&lt;/span&gt;
&lt;span class="na"&gt;meta&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;0.3.1&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;github-stars-inbound&lt;/span&gt;
  &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;http-source&lt;/span&gt;
  &lt;span class="na"&gt;topic&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;github-stars&lt;/span&gt;
&lt;span class="na"&gt;http&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;endpoint&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;https://api.github.com/repos/[your_org/your_repo]'&lt;/span&gt;
  &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;GET&lt;/span&gt;
  &lt;span class="na"&gt;interval&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;60s&lt;/span&gt;
&lt;span class="na"&gt;transforms&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;infinyon/jolt@0.3.0&lt;/span&gt;
    &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;spec&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;operation&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;shift&lt;/span&gt;
          &lt;span class="na"&gt;spec&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;stargazers_count"&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;stars"&lt;/span&gt;
            &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;forks_count"&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;forks"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run the http-source connector using the configuration with the following command:&lt;/p&gt;

&lt;p&gt;You can skip the secrets parameter if you have not set a GitHub API Key.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;cdk deploy start &lt;span class="nt"&gt;--ipkg&lt;/span&gt; infinyon-http-source-0.3.1.ipkg &lt;span class="nt"&gt;--config&lt;/span&gt; github.yaml &lt;span class="nt"&gt;--secrets&lt;/span&gt; secrets.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;All configuration in the context of Fluvio data flows are YAML based. We will have a configuration for each source and sink system to deploy the connectors.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Inspect or Shutdown the GitHub Connector:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you want to see the status, you can run&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;cdk deploy list
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you want to shutdown the connector, you can run&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;cdk deploy shutdown &lt;span class="nt"&gt;--name&lt;/span&gt; github-stars-inbound
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Back to Navigation&lt;/p&gt;




&lt;h3&gt;
  
  
  Outbound Discord Connector &lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;To get the alerts for stars and forks in a Discord channel you need:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a Discord server with admin access&lt;/li&gt;
&lt;li&gt;a new or existing Discord Channel for the alerts&lt;/li&gt;
&lt;li&gt;a Discord Application&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Create a Discord Application:&lt;/strong&gt; Discord Apps Docs: To create the discord bot simply go into server settings -&amp;gt; Integrations -&amp;gt; New Webhook -&amp;gt; Name the webhook, pick the channel, copy the Webhook URL.&lt;/p&gt;

&lt;p&gt;The Discord token is the unique identifier of your workspace.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Create a configuration file to connect to Discord - call it discord.yaml:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;apiVersion&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;0.1.0&lt;/span&gt;
&lt;span class="na"&gt;meta&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;0.2.6&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;discord-stars-outbound&lt;/span&gt;
  &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;http-sink&lt;/span&gt;
  &lt;span class="na"&gt;topic&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;github-stars&lt;/span&gt;
  &lt;span class="na"&gt;secrets&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;DISCORD_TOKEN&lt;/span&gt;
&lt;span class="na"&gt;http&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;endpoint&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://discord.com/api/webhooks/${{&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;secrets.DISCORD_TOKEN&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;}}"&lt;/span&gt;
  &lt;span class="na"&gt;headers&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Content-Type:&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;application/json"&lt;/span&gt;
&lt;span class="na"&gt;transforms&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;infinyon-labs/stars-forks-changes@0.1.2&lt;/span&gt;
    &lt;span class="na"&gt;lookback&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;last&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;infinyon/jolt@0.3.0&lt;/span&gt;
    &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;spec&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;operation&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;shift&lt;/span&gt;
          &lt;span class="na"&gt;spec&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;result"&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Start the Discord Connector:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;cdk deploy start &lt;span class="nt"&gt;--ipkg&lt;/span&gt; infinyon-http-sink-0.2.6.ipkg &lt;span class="nt"&gt;--config&lt;/span&gt; discord.yaml &lt;span class="nt"&gt;--secrets&lt;/span&gt; secrets.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You will now receive notifications on Stars and Forks activity in the Discord channel that you chose.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Inspect or Shutdown the Discord Connector:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you want to see the status, you can run&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;cdk deploy list
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you want to shutdown the connector, you can run&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;cdk deploy shutdown &lt;span class="nt"&gt;--name&lt;/span&gt; discord-stars-outbound
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Back to Navigation&lt;/p&gt;




&lt;h3&gt;
  
  
  Outbound Slack Connector &lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;To get the alerts for stars and forks in a Slack channel you need:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a slack workspace with admin access&lt;/li&gt;
&lt;li&gt;a new or existing Slack Channel for the alerts&lt;/li&gt;
&lt;li&gt;a Slack Application&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Create a Slack Application:&lt;/strong&gt; Follow the steps in the &lt;a href="https://api.slack.com/start/quickstart"&gt;quickstart to create a slack application&lt;/a&gt;, and activate incoming webhook in features, copy the URL, and install the slack app in your workspace.&lt;/p&gt;

&lt;p&gt;The Slack token is the unique identifier of your workspace.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Create a configuration file to connect to Slack - call it slack.yaml:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;apiVersion&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;0.1.0&lt;/span&gt;
&lt;span class="na"&gt;meta&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;0.2.6&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;slack-stars-outbound&lt;/span&gt;
  &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;http-sink&lt;/span&gt;
  &lt;span class="na"&gt;topic&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;github-stars&lt;/span&gt;
  &lt;span class="na"&gt;secrets&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;SLACK_TOKEN&lt;/span&gt;
&lt;span class="na"&gt;http&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;endpoint&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://hooks.slack.com/services/${{&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;secrets.SLACK_TOKEN&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;}}"&lt;/span&gt;
  &lt;span class="na"&gt;headers&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Content-Type:&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;application/json"&lt;/span&gt;
&lt;span class="na"&gt;transforms&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;infinyon-labs/stars-forks-changes@0.1.2&lt;/span&gt;
    &lt;span class="na"&gt;lookback&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;last&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;infinyon/jolt@0.3.0&lt;/span&gt;
    &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;spec&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;operation&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;shift&lt;/span&gt;
          &lt;span class="na"&gt;spec&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;result"&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Start the Slack Connector:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;cdk deploy start &lt;span class="nt"&gt;--ipkg&lt;/span&gt; infinyon-http-sink-0.2.6.ipkg &lt;span class="nt"&gt;--config&lt;/span&gt; slack.yaml &lt;span class="nt"&gt;--secrets&lt;/span&gt; secrets.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You will start receiving notifications on Stars and Forks activity in the Slack channel that you chose.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Inspect or Shutdown the Slack Connector:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you want to see the status, you can run&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;cdk deploy list
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you want to shutdown the connector, you can run&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;cdk deploy shutdown &lt;span class="nt"&gt;--name&lt;/span&gt; slack-stars-outbound
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Back to Navigation&lt;/p&gt;




&lt;h3&gt;
  
  
  Fluvio Docs Reference &lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Here are some relevant docs that you can look at for further context:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://infinyon.com/docs/"&gt;InfinyOn Docs Master&lt;/a&gt;&lt;br&gt;
&lt;a href="https://infinyon.com/docs/guides/github-to-slack/"&gt;GitHub to Slack&lt;/a&gt;&lt;br&gt;
&lt;a href="https://infinyon.com/docs/guides/github-to-discord/"&gt;GitHub to Discord&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.fluvio.io/cli/"&gt;Fluvio CLI Docs&lt;/a&gt;&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>tutorial</category>
      <category>rust</category>
      <category>github</category>
    </item>
    <item>
      <title>8 Rusty open source data projects to watch in 2024 🤩</title>
      <dc:creator>Deb</dc:creator>
      <pubDate>Thu, 07 Dec 2023 04:54:43 +0000</pubDate>
      <link>https://forem.com/debadyuti/8-rusty-open-source-data-projects-to-watch-in-2024-3o90</link>
      <guid>https://forem.com/debadyuti/8-rusty-open-source-data-projects-to-watch-in-2024-3o90</guid>
      <description>&lt;h3&gt;
  
  
  Context
&lt;/h3&gt;

&lt;p&gt;The open source ecosystem is my favourite aspect of tech. It has been since the early days of BIG data in late 2000's. As software, infra, and data engineers, open source projects are a source of great inspiration for all of us. Open source projects are also a great help in building solutions to validate and resolve customer challenges without reinventing the wheel.&lt;/p&gt;

&lt;p&gt;In my first post wearing the developer advocacy hat, as a technical product leader, I want share 5 data projects that I am tinkering during the December break going into 2024.&lt;/p&gt;

&lt;p&gt;First I will share why data projects? and why Rust? Then I will share 5 open source projects that I am looking deeper into over the coming days and months.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why data projects?
&lt;/h3&gt;

&lt;p&gt;Data is at the centre of attraction in tech. For the past 12 years, I have heard it said in several software companies that "we want to treat data as a first class citizen." The reason and reality that surrounded the statement is that data has been anything but a first class citizen in majority of organizations.&lt;/p&gt;

&lt;p&gt;Data has come in the limelight every now and then. But it's been off and on.&lt;/p&gt;

&lt;p&gt;In my personal experience, data got bursts of attention since the early 21st century with the rise of the big data ecosystem, distributed file systems, map-reduce, NoSQL, machine learning, deep learning, artificial intelligence, and more recently large language models.&lt;/p&gt;

&lt;p&gt;I have been working with complex data use cases since 2009. While I got enthused by augmented and virtual reality for a while, blockchain and cryptography for a bit, my affinity towards data is consistent throughout my career.&lt;/p&gt;

&lt;p&gt;There has never been a better time to dive deep into data.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why Rust based?
&lt;/h3&gt;

&lt;p&gt;Since the my first C/C++ programs implementing trees, and linked lists in early 2000s, I have written code on C#, ASP.net, Java, Python, and R between 2010 and now. It took extra work to keep up with writing code since moving to technical product management in 2014.&lt;/p&gt;

&lt;p&gt;That's why I have not tried Go or Rust yet, and have remained content with SQL and Python scripts. As someone with a bit of experience in data centric applications, I am arguing that the existing stack has served us well. But the demands of data centric applications have increased along with the innovations in hardware infrastructure and we need to adapt.&lt;/p&gt;

&lt;p&gt;Rust has been dubbed as a hype for a bit. But it is boring. It's complex to get started. It is at the system level as C++ with some additional promise.&lt;/p&gt;

&lt;p&gt;Yet it is the most loved language by it's adopters and it has proved to be better than alternative system level programming languages in terms of performance, security, reliability, efficiency. Several big tech companies have made the incredibly rare choice of rewriting critical distributed systems in Rust.&lt;/p&gt;

&lt;p&gt;I have been working since January 2023 with a team that has been building with Rust since 5 years. I believe Rust will inevitably power several distributed data systems as I dabble with various projects. It's about time I took a deeper dive!&lt;/p&gt;

&lt;h3&gt;
  
  
  The 8 Rust based open source data projects to try in 2023
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Fluvio [GitHub: &lt;a href="https://github.com/infinyon/fluvio"&gt;https://github.com/infinyon/fluvio&lt;/a&gt;]&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The word Fluvio comes from Latin fluvius ‘river’. A river is made up of continuous 'streams' and powers entire civilizations through agriculture. It is an apt name for a data streaming platform.&lt;/p&gt;

&lt;p&gt;I learnt about Fluvio in mid 2022 and it was a project recommended by a genius tech architect friend. I left my last role and higher pay to work in product leadership at InfinyOn the creators of Fluvio in January 2023. I have used the cloud instances a lot more since I did not want to spend the additional time configuring Kubernetes on my local system to play around with the open source version.&lt;/p&gt;

&lt;p&gt;Here is the description that I recently updated on the Fluvio GitHub Repo:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Lean and mean distributed stream processing system written in rust and web assembly.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I have used the InfinyOn Managed Cloud since I did not want to spend the additional time configuring Kubernetes on my local system to play around with the open source version.&lt;/p&gt;

&lt;p&gt;We just released a single binary installer for Fluvio Open Source with no dependency on Kubernetes. And I am now going to start tinkering around with the dev kits with the open source project. I will be sharing more about the workflows soon.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Arroyo [GitHub: &lt;a href="https://github.com/ArroyoSystems/arroyo"&gt;https://github.com/ArroyoSystems/arroyo&lt;/a&gt;]&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Arroyo is a scalable stateful stream processing engine that is written in Rust and provides a SQl interface. Arroyo is Y-Combinator backed startup project with a mission to build a streaming-first future.&lt;/p&gt;

&lt;p&gt;About Arroyo on the GitHub Repo is succinct:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Distributed stream processing engine in Rust&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The ability to express stateful streaming operations using declarative SQL is what data engineers love. One top of that Arroyo has an integration with Fluvio with a rust based engine which makes it a great combination.&lt;/p&gt;

&lt;p&gt;I am looking froward to trying out the arroyo example projects and running SQL based state operations on data from Fluvio topics. I will be sharing all about these workflows everywhere.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Qdrant [GitHub: &lt;a href="https://github.com/qdrant/qdrant"&gt;https://github.com/qdrant/qdrant&lt;/a&gt;]&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Quadrant is a vector database and similarity search engine written in rust. It's making waves powering better search capabilities for several well known products like Twitter, GitBook and more.&lt;/p&gt;

&lt;p&gt;The GitHub Repo About section describes Qdrant as::&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Qdrant - High-performance, massive-scale Vector Database for the next generation of AI. Also available in the cloud &lt;a href="https://cloud.qdrant.io/"&gt;https://cloud.qdrant.io/&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The ability to store embeddings of large language models and deep neural network based auto encoders is in high demand given the massive accessibility and popularity of large language models.&lt;/p&gt;

&lt;p&gt;Search and chat are highly used functionalities, and I am looking forward to testing out building out the demo projects and digging into the interfaces in quadrant.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Lancedb [GitHub: &lt;a href="https://github.com/lancedb/lancedb"&gt;https://github.com/lancedb/lancedb&lt;/a&gt;]&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;LanceDB calls is a database for vector search. Seems like Lancedb is a bridge between, Python and Rust. Lancedb core is written in rust and it supports native Python and Javascript/Typescript.&lt;/p&gt;

&lt;p&gt;The GitHub Repo About section describes LanceDB as:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Developer-friendly, serverless vector database for AI applications. Easily add long-term memory to your LLM apps!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I am looking forward to testing out the ecosystem integrations with LangChain 🦜️🔗, LlamaIndex 🦙, Apache-Arrow, Pandas, Polars, DuckDB and more on the way. It would be interesting to see the similarities and differences between LanceDB and Qdrant.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Linfa [GitHub: &lt;a href="https://github.com/rust-ml/linfa"&gt;https://github.com/rust-ml/linfa&lt;/a&gt;]&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Having spent a decent amount of time over the years tinkering around with Scikit-Learn in Pyhton, I am curious to try out Linfa. It would be cool to try out the basic machine learning and statistical models to get a feel for how to implement them in rust using a reasonable framework.&lt;/p&gt;

&lt;p&gt;About Linfa on GitHub is precise:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A Rust machine learning framework.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Linfa in Italian translates to sap in English. The project "aims to provide a comprehensive toolkit to build Machine Learning applications with Rust. Kin in spirit to Python's scikit-learn, it focuses on common preprocessing tasks and classical ML algorithms for your everyday ML tasks."&lt;/p&gt;

&lt;p&gt;I hope this becomes a decent bridge from Python to Rust. Data processing for machine learning and statistical modelling has been a useful way for me to learn about different use cases, and I am looking forward to playing around with Linfa.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Polars [GitHub: &lt;a href="https://github.com/pola-rs/polars"&gt;https://github.com/pola-rs/polars&lt;/a&gt;]&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Polars has the highest momentum among data engineers who are used to Pandas DataFrames. I have experience with Pandas in a decent bit of experimentation. Interesting thing is that polars is a DaatFrame interface on top of an OLAP engine.&lt;/p&gt;

&lt;p&gt;About Polars from GitHub reads:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Dataframes powered by a multithreaded, vectorized query engine, written in Rust.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I am looking forward to specifically trying out hybrid streaming functionality on Polars and testing out the possibilities of using the interface for interactive real time visualization. I also want to test out the Pyo3 extensions for Python functions complied in Rust.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Lance [GitHub: &lt;a href="https://github.com/lancedb/lance"&gt;https://github.com/lancedb/lance&lt;/a&gt;]&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Lance is a columnar data format which deliberately calls out the ease of converting from parquet files. Lance is the format used by the Lancedb vector database. Lance is also compatible with Pandas, DuckDb, Polars, Pyarrow.&lt;/p&gt;

&lt;p&gt;About Lance from GitHub reads:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Modern columnar data format for ML and LLMs implemented in Rust. Convert from parquet in 2 lines of code for 100x faster random access, vector index, and data versioning. Compatible with Pandas, DuckDB, Polars, Pyarrow, with more integrations coming.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Converting parquet files with 2 lines of code for 100X faster random access is insane, given the popularity of the parquet format. I am looking to try out a couple of end to end streaming flows, switch around the data formats and compare the different engines in different parts of the pipeline to identify the integration challenges, pros and cons of using different systems.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Surrealdb [GitHub: &lt;a href="https://github.com/surrealdb/surrealdb"&gt;https://github.com/surrealdb/surrealdb&lt;/a&gt;]&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Surreal is the most popular project on this list in terms of community engagement. Surreal is a document-graph data store for modern web applications.&lt;/p&gt;

&lt;p&gt;About SurrealDB from GitHub reads:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A scalable, distributed, collaborative, document-graph database, for the realtime web.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Surreal is interesting as it is transactional, strongly typed, and offers granular access control. It also offers a degree of multi-modality and offers representations in tables, documents, and graphs making it an interesting player in the distributed serverless databases.&lt;/p&gt;

&lt;p&gt;I am looking forward to checking out the community projects and trying out theirs data models for streaming data.&lt;/p&gt;

&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;It's always a party in tech, and with new things getting announced everyday there would surely be more options in the coming year. There are few other projects that I am looking at trying out in the process including Apache OpenDAL [&lt;a href="https://opendal.apache.org/"&gt;https://opendal.apache.org/&lt;/a&gt;], OneTable [&lt;a href="https://github.com/onetable-io/onetable"&gt;https://github.com/onetable-io/onetable&lt;/a&gt;] are a couple that comes to mind.&lt;/p&gt;

&lt;p&gt;Anyways, it sounds like 2024 is going to take my back to my software and data engineering days in early 2010s, and I am looking forward to sharing about my experiences with these tools, performance profiles, opinions about the landscape and more.&lt;/p&gt;

&lt;p&gt;I am also a big believer in sharing my work in the places where people find their information. I have a single link to my profiles on various developer communities, and social media. Feel free to connect with me wherever you engage with developer insights.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Here is my link tree&lt;/strong&gt; - &lt;a href="https://www.singlel.ink/u/debroychowdhury"&gt;https://www.singlel.ink/u/debroychowdhury&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;See you around&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Deb.&lt;/p&gt;

</description>
      <category>rust</category>
      <category>data</category>
      <category>opensource</category>
      <category>dataengineering</category>
    </item>
  </channel>
</rss>
