diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..447c7cc --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,151 @@ +# Changelog +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [Unreleased] + +## [1.0.0] - 2017-06-20 +### Added +- New visual identity by [@tylerfortune8](https://github.com/tylerfortune8). +- Version navigation. +- Links to latest released version in previous versions. +- "Why keep a changelog?" section. +- "Who needs a changelog?" section. +- "How do I make a changelog?" section. +- "Frequently Asked Questions" section. +- New "Guiding Principles" sub-section to "How do I make a changelog?". +- Simplified and Traditional Chinese translations from [@tianshuo](https://github.com/tianshuo). +- German translation from [@mpbzh](https://github.com/mpbzh) & [@Art4](https://github.com/Art4). +- Italian translation from [@azkidenz](https://github.com/azkidenz). +- Swedish translation from [@magol](https://github.com/magol). +- Turkish translation from [@karalamalar](https://github.com/karalamalar). +- French translation from [@zapashcanon](https://github.com/zapashcanon). +- Brazilian Portugese translation from [@Webysther](https://github.com/Webysther). +- Polish translation from [@amielucha](https://github.com/amielucha) & [@m-aciek](https://github.com/m-aciek). +- Russian translation from [@aishek](https://github.com/aishek). +- Czech translation from [@h4vry](https://github.com/h4vry). +- Slovak translation from [@jkostolansky](https://github.com/jkostolansky). +- Korean translation from [@pierceh89](https://github.com/pierceh89). +- Croatian translation from [@porx](https://github.com/porx). +- Persian translation from [@Hameds](https://github.com/Hameds). +- Ukrainian translation from [@osadchyi-s](https://github.com/osadchyi-s). + +### Changed +- Start using "changelog" over "change log" since it's the common usage. +- Start versioning based on the current English version at 0.3.0 to help +translation authors keep things up-to-date. +- Rewrite "What makes unicorns cry?" section. +- Rewrite "Ignoring Deprecations" sub-section to clarify the ideal + scenario. +- Improve "Commit log diffs" sub-section to further argument against + them. +- Merge "Why can’t people just use a git log diff?" with "Commit log + diffs" +- Fix typos in Simplified Chinese and Traditional Chinese translations. +- Fix typos in Brazilian Portuguese translation. +- Fix typos in Turkish translation. +- Fix typos in Czech translation. +- Fix typos in Swedish translation. +- Improve phrasing in French translation. +- Fix phrasing and spelling in German translation. + +### Removed +- Section about "changelog" vs "CHANGELOG". + +## [0.3.0] - 2015-12-03 +### Added +- RU translation from [@aishek](https://github.com/aishek). +- pt-BR translation from [@tallesl](https://github.com/tallesl). +- es-ES translation from [@ZeliosAriex](https://github.com/ZeliosAriex). + +## [0.2.0] - 2015-10-06 +### Changed +- Remove exclusionary mentions of "open source" since this project can +benefit both "open" and "closed" source projects equally. + +## [0.1.0] - 2015-10-06 +### Added +- Answer "Should you ever rewrite a change log?". + +### Changed +- Improve argument against commit logs. +- Start following [SemVer](https://semver.org) properly. + +## [0.0.8] - 2015-02-17 +### Changed +- Update year to match in every README example. +- Reluctantly stop making fun of Brits only, since most of the world + writes dates in a strange way. + +### Fixed +- Fix typos in recent README changes. +- Update outdated unreleased diff link. + +## [0.0.7] - 2015-02-16 +### Added +- Link, and make it obvious that date format is ISO 8601. + +### Changed +- Clarified the section on "Is there a standard change log format?". + +### Fixed +- Fix Markdown links to tag comparison URL with footnote-style links. + +## [0.0.6] - 2014-12-12 +### Added +- README section on "yanked" releases. + +## [0.0.5] - 2014-08-09 +### Added +- Markdown links to version tags on release headings. +- Unreleased section to gather unreleased changes and encourage note +keeping prior to releases. + +## [0.0.4] - 2014-08-09 +### Added +- Better explanation of the difference between the file ("CHANGELOG") +and its function "the change log". + +### Changed +- Refer to a "change log" instead of a "CHANGELOG" throughout the site +to differentiate between the file and the purpose of the file — the +logging of changes. + +### Removed +- Remove empty sections from CHANGELOG, they occupy too much space and +create too much noise in the file. People will have to assume that the +missing sections were intentionally left out because they contained no +notable changes. + +## [0.0.3] - 2014-08-09 +### Added +- "Why should I care?" section mentioning The Changelog podcast. + +## [0.0.2] - 2014-07-10 +### Added +- Explanation of the recommended reverse chronological release ordering. + +## [0.0.1] - 2014-05-31 +### Added +- This CHANGELOG file to hopefully serve as an evolving example of a + standardized open source project CHANGELOG. +- CNAME file to enable GitHub Pages custom domain +- README now contains answers to common questions about CHANGELOGs +- Good examples and basic guidelines, including proper date formatting. +- Counter-examples: "What makes unicorns cry?" + +[Unreleased]: https://github.com/olivierlacan/keep-a-changelog/compare/v1.0.0...HEAD +[1.0.0]: https://github.com/olivierlacan/keep-a-changelog/compare/v0.3.0...v1.0.0 +[0.3.0]: https://github.com/olivierlacan/keep-a-changelog/compare/v0.2.0...v0.3.0 +[0.2.0]: https://github.com/olivierlacan/keep-a-changelog/compare/v0.1.0...v0.2.0 +[0.1.0]: https://github.com/olivierlacan/keep-a-changelog/compare/v0.0.8...v0.1.0 +[0.0.8]: https://github.com/olivierlacan/keep-a-changelog/compare/v0.0.7...v0.0.8 +[0.0.7]: https://github.com/olivierlacan/keep-a-changelog/compare/v0.0.6...v0.0.7 +[0.0.6]: https://github.com/olivierlacan/keep-a-changelog/compare/v0.0.5...v0.0.6 +[0.0.5]: https://github.com/olivierlacan/keep-a-changelog/compare/v0.0.4...v0.0.5 +[0.0.4]: https://github.com/olivierlacan/keep-a-changelog/compare/v0.0.3...v0.0.4 +[0.0.3]: https://github.com/olivierlacan/keep-a-changelog/compare/v0.0.2...v0.0.3 +[0.0.2]: https://github.com/olivierlacan/keep-a-changelog/compare/v0.0.1...v0.0.2 +[0.0.1]: https://github.com/olivierlacan/keep-a-changelog/releases/tag/v0.0.1 \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..2410030 --- /dev/null +++ b/README.md @@ -0,0 +1,166 @@ +- Badges + +[![Keep a Changelog v1.1.0 badge][changelog-badge]][changelog] + +[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org) + +======= + [![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org) + +- Build + +Drone: + +[![Build Status](https://cloud.drone.io/api/badges/astubbs/ks-tributary/status.svg)](https://cloud.drone.io/astubbs/ks-tributary) + +CodeCov.io: + +[![codecov](https://codecov.io/gh/astubbs/ks-tributary/branch/master/graph/badge.svg)](https://codecov.io/gh/astubbs/ks-tributary) + +# KS-Tributary; A Kafka Streams Reference App + +Realistic implementation of a full real Kafka Streams application and stream processing logic. + + * [How to run](#how-to-run) + * [Maven](#maven) + * [How to build](#how-to-build) + * [Features](#features) + * [Stream Processing](#stream-processing) + * [Generic](#generic) + * [Finance](#finance) + * [Chat](#chat) + * [Unit testing](#unit-testing) + * [Integration testing](#integration-testing) + * [Software Structure](#software-structure) + * [Features on their way...](#features-on-their-way) + * [Stream Processing](#stream-processing-1) + * [Software Structure](#software-structure-1) + * [Development](#development) + * [Building](#building) + * [Contributing](#contributing) + +## How to run + +Integration tests require a running docker daemon. + +Intellij - use provided run targets to run with or without integration tests + +### Maven + +Disable integration tests + + mvn clean verify -DskipITs + +## How to build + +## Features + +### Stream Processing + +#### Generic +- Realtime delta calculation (e.g. produce derived delta messages from database CDC full state messages) +- Cached system configuration lookup with realtime updates +- Realtime fan out of topic data onto _communication channels_ like web sockets +- Dynamic Avro wrapper system to extend Avro objects with custom code without modifying generated code, integrated with Avro Serdes + +#### Finance +- Realtime calculation of windows + - Three topologies + - Financial snap set precomputation + - Simpler approach that's centralised performance wise + - More sophisticated fully distributed + - Custom state store intermediate level demonstration +- Simple high low bar calculation +- Back loading of data from previous buckets + + +#### Chat +- Transcript generation + + +### Unit testing +- Demonstration of Time model decoupling for test +- Demonstration of AssertJ powerful assertions + - here + - here + +### Integration testing +- Model hydration using human readable data from JavaFaker[] project + - Deterministic generation of series of random data, useful for larger integration tests +- TestContainers for Integration Testing with real Kafka brokers. +- CI service integration: Travis, CircleCI, Drone (drone not working with Docker in Docker (i.e. TestContainers not working)) +- JSR Money integration +- Avro message sizing analysis - i.e. how big is my data when it's bin packed and compressed? Compared with Gzipped vs Zstd vs Json? +- Demonstration of asynchronous testing using Awaitility[] + + +### Software Structure +- Guice (dynamic) and Dagger (static) dependency injection examples +- Dagger +- Java Money library demonstration +- Java Units of Measure library demonstration (statically typed Scientific units combination library) +- Lombok use (make Java more tolerable) +- Avro IDL vs AVSC model generation demonstration + + +## Features on their way... +### Stream Processing +- Realtime out of order recalculation of data aggregation in state dependent buckets +- Massive scale question and answer quiz show of just in time answer discovery + - Massive skew avoidance techniques +- Compound key query demonstration / data demoralisation (e.g. Invoice reconstruction from Orders and Order Items) +- Yearly aggregator by date (think April 5th Financial years) + - Normal window computations can only run against fixed size windows (e.g. not calenda dates) + - Extending to also do monthly dates is an easy modification + +### Software Structure +- External Interactive Query example on Qurkus[] and GraalVM[] + +[0.7] +Dagger + +[0.6] +0.5 +0.4 +0.3 +0.2 +[0.1] +- Three topologies + - Financial snap set precomputation + - Simpler approach that's centralised performance wise + + - More sophisticated fully distributed + - Custom state store intermediate level demonstration +- Unit testing coverage + - Guice test wiring +- Separated Integration testing + - Kafka ContainerTests +- Avro message model sizing analysis + - Raw bin-packed vs GZipped vs Json +- Java Science Units and Quantities use + +## Development + +### Building + +- Requires Lombok plugin for your IDE + +### Contributing +Submit a PR for review :) + +https://www.conventionalcommits.org/en/v1.0.0/ + [the Angular convention](https://github.com/angular/angular/blob/22b96b9/CONTRIBUTING.md#-commit-message-guidelines) + + +[val-lombok]: https://www.projectlombok.org/features/val + +[rbenv]: https://github.com/rbenv/rbenv +[ruby-version]: .ruby-version +[source]: source/ +[pull-request]: https://help.github.com/articles/creating-a-pull-request/ +[fork]: https://help.github.com/articles/fork-a-repo/ +[version-badge]: https://img.shields.io/badge/version-1.1.0-blue.svg +[license-badge]: https://img.shields.io/badge/license-MIT-blue.svg + +[changelog]: ./CHANGELOG.md +[changelog-badge]: https://img.shields.io/badge/changelog-Keep%20a%20Changelog%20v1.1.0-%23E05735