{"id":19777946,"url":"https://github.com/datadome/public-flink-utils","last_synced_at":"2026-05-15T03:33:57.672Z","repository":{"id":113111043,"uuid":"302027629","full_name":"DataDome/public-flink-utils","owner":"DataDome","description":"Utilities for Flink","archived":false,"fork":false,"pushed_at":"2022-11-08T08:28:21.000Z","size":21,"stargazers_count":2,"open_issues_count":0,"forks_count":1,"subscribers_count":6,"default_branch":"master","last_synced_at":"2025-02-28T12:21:39.381Z","etag":null,"topics":["flink","public"],"latest_commit_sha":null,"homepage":"","language":"Scala","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/DataDome.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-10-07T12:21:47.000Z","updated_at":"2024-01-09T16:14:40.000Z","dependencies_parsed_at":"2024-03-30T14:15:32.407Z","dependency_job_id":null,"html_url":"https://github.com/DataDome/public-flink-utils","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/DataDome/public-flink-utils","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DataDome%2Fpublic-flink-utils","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DataDome%2Fpublic-flink-utils/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DataDome%2Fpublic-flink-utils/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DataDome%2Fpublic-flink-utils/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/DataDome","download_url":"https://codeload.github.com/DataDome/public-flink-utils/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DataDome%2Fpublic-flink-utils/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33052703,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-13T13:14:54.681Z","status":"online","status_checked_at":"2026-05-15T02:00:06.351Z","response_time":103,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["flink","public"],"created_at":"2024-11-12T05:27:12.865Z","updated_at":"2026-05-15T03:33:57.656Z","avatar_url":"https://github.com/DataDome.png","language":"Scala","funding_links":[],"categories":[],"sub_categories":[],"readme":"This is a **PUBLIC** repository for some tools we use in our Flink jobs.\n\n# State signature\nThis makes the UID of an operator change automatically whenever there is some change in the state structure, making sure Flink will not try to reload the old state.\n\nIn your model classes:\n```scala\n  import co.datadome.flinkutils.util.TypeSignature\n\n  case class BotBuster(name: String)\n\n  object BotBuster {\n    implicit val typeSignature: TypeSignature[BotBuster] =\n      TypeSignature.forSimpleCaseClass[BotBuster]\n  }\n\n  class Something { … }\n\n  object Something {\n    implicit val typeSignature: TypeSignature[Something] =\n      TypeSignature[Something]\n        .withType[String]\n        .withType[BotBuster]\n        .build\n  }\n```\nIn your operator:\n```scala\n  import co.datadome.flinkutils.util.{StateTypeSignature, TypeSignature}\n  import org.apache.flink.streaming.api.functions.co.KeyedBroadcastProcessFunction\n\n  class MyKeyedBroadcastProcessFunction extends KeyedBroadcastProcessFunction[Int, String, Boolean, Int] { … }\n\n  object MyKeyedBroadcastProcessFunction {\n    val stateSignature = StateTypeSignature.forKeyedBroadcastFunction[MyKeyedBroadcastProcessFunction]\n      .withKey[Int]\n      .withValueState[Set[String]]\n      .withBroadcastState[Int, BotBuster]\n      .build\n  }\n```\nIn your job:\n```scala\n  import org.apache.flink.streaming.api.scala._\n  import co.datadome.flinkutils.syntax._\n\n  val stream: DataStream[String] = ???\n  stream.uidNameStated[MyKeyedBroadcastProcessFunction](\"my-function\")\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdatadome%2Fpublic-flink-utils","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdatadome%2Fpublic-flink-utils","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdatadome%2Fpublic-flink-utils/lists"}