When Funding Circle needed to scale its lending platform, we chose Kafka and Clojure. More than a programming language, Clojure is an interactive development environment with which you can build up an application function by function in a continuous unbroken flow. Since 2016 we have been developing our lending platform using Clojure and Kafka Streams, and today we process millions of transaction dollars daily. In 2018 we released "Jackdaw", our open-source Clojure library for working with Kafka Streams. In this talk, attendees will learn a radical new approach to building stream processing applications in a highly productive environment--one they can use immediately via Jackdaw or apply to their favorite programming system.
2. Funding Circle
allows investors to
lend to established,
creditworthy
small businesses.
“We’ve made it our mission to help
small businesses across the world
go even further.”
Samir Desai
Co-founder and CEO
2
72,000
Small business
borrowers globally
$4.5 billion
Loans under
management globally
90,000+
Individual investors and
financial institutions
3. Kafka as a streaming platform
3
Kafka
API Front End Metrics Data Lake
Underwriting Servicing Trades Accounting
6. “
6
It's better to have 100 functions
operate on one data structure than
10 functions on 10 data structures.
Perlis, A. J. (1982). Epigrams on Programming.
SIGPLAN Notices 17(9)
7. Only a few data structures...
7
list, vector, map, set
8. 8
Many functions
distinct filter remove for keep keep-indexed cons concat lazy-cat mapcat cycle
interleave interpose rest next fnext nnext drop drop-while nthnext for take take-nth
take-while butlast drop-last for flatten reverse sort sort-by shuffle split-at split-
with partition partition-all partition-by map pmap mapcat for replace reductions map-
indexed seque first ffirst nfirst second nth when-first last rand-nth zipmap into
reduce set vec into-array to-array-2d frequencies group-by apply not-empty some reduce
seq? every? not-every? not-any? empty? some filter doseq dorun doall realized? seq
vals keys rseq subseq rsubseq lazy-seq repeatedly iterate repeat range line-seq
resultset-seq re-seq tree-seq file-seq xml-seq iterator-seq enumeration-seq
59. 59
Resources
"Transducers" by Rich Hickey
Strange Loop. (2014, September).
https://www.youtube.com/watch?v=6mTbuzafcII
Kafka and the REPL: Stream Processing, the Functional Way
Reese, C. (2018, November).
http://2018.clojure-conj.org/charles-reese/
Testing Event-Driven Systems
Chambers, A. (2018, April).
https://www.confluent.io/blog/testing-event-driven-systems
Jackdaw
Funding Circle. (2017).
https://github.com/FundingCircle/jackdaw