{"id":22048891,"url":"https://github.com/teta42/anti_duplicate_system","last_synced_at":"2025-03-23T14:45:39.256Z","repository":{"id":254990869,"uuid":"848188527","full_name":"teta42/Anti_Duplicate_System","owner":"teta42","description":"Система противодействующая обработки дубликатов, работает исключительно на Kafka","archived":false,"fork":false,"pushed_at":"2024-10-03T11:39:47.000Z","size":20,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-28T21:14:47.364Z","etag":null,"topics":["kafka","kafka-consumer","kafka-producer","package","python","python3"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/teta42.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":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-08-27T09:50:46.000Z","updated_at":"2024-10-03T11:39:50.000Z","dependencies_parsed_at":"2024-08-27T11:26:36.525Z","dependency_job_id":"5058a87a-14d7-4238-ac31-e376d3e75702","html_url":"https://github.com/teta42/Anti_Duplicate_System","commit_stats":null,"previous_names":["teta42/anti_duplicate_system"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/teta42%2FAnti_Duplicate_System","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/teta42%2FAnti_Duplicate_System/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/teta42%2FAnti_Duplicate_System/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/teta42%2FAnti_Duplicate_System/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/teta42","download_url":"https://codeload.github.com/teta42/Anti_Duplicate_System/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245119573,"owners_count":20563763,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["kafka","kafka-consumer","kafka-producer","package","python","python3"],"created_at":"2024-11-30T14:13:38.426Z","updated_at":"2025-03-23T14:45:39.226Z","avatar_url":"https://github.com/teta42.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Anti-Duplicate System for **Kafka**\nПроект нужный для создания системы которая гарантирует **НЕ** обработку копий сообщения.\n\n## Примеры использования:\nТак как моя библиотека это надстройка для библиотеки Kafka-python, то функционал одинаков.\n\n1) Производитель(Producer):\n```python\nfrom Aduplicate.Producer import Producer\nimport json\nimport random\nfrom time import sleep\n\np = Producer(\n    bootstrap_servers='localhost:9092',  # Адрес вашего Kafka брокера\n    value_serializer=lambda v: json.dumps(v).encode('utf-8'), # Сериализация сообщений в JSON)\n    acks=1,\n    retries=10,)\n\na = 0\nwhile a \u003c 100:\n    mess = {'b': int(random.randint(-10, 0)), \"a\": int(random.randint(10, 20))}\n    p.send('test', mess)\n    print(f'{mess}')\n    a = a + 1\n    sleep(0.5)\n\n# Закрываем продюсер\np.close()\n```\nПример кода который отправляет 100 сообщений.\n\n2) Потребитель(Consumer):\n```python\nfrom Aduplicate.Consumer import Consumer\nimport json\n\nc = Consumer(bootstrap_servers='localhost:9092',  # Адрес вашего Kafka брокера\n    auto_offset_reset='latest', \n    enable_auto_commit=True,\n    group_id='my-group',\n    value_deserializer=lambda x: json.loads(x.decode('utf-8')) # Сериализация сообщений в JSON)\n    )\n\nc.subscribe(['test'])\na = 1\ntry:\n    for message in c:\n        print(f\"Получено сообщение: {message.value} из партиции: {message.partition}, смещение: {message.offset}\\n\")\n        a = a + 1\nexcept KeyboardInterrupt:\n    print('ok, im stoped')\nfinally:\n    c.close()  # Закрываем потребителя\n    \nprint(a)\n```\nПример кода который получает сообщения и после остановки `ctrl + c` выводит количество полученных сообщений.\n\n# Как работает библиотека:\n## Потребитель\n1) Сообщения в спец. теме - это сообщения которые говорят о том какие сообщения были проверенны.\n2) Во втором пункте начала мы разделяем большой список на несколько мелких, каждый такой мелкий список хранит сообщения лишь из определённой партиции.\n3) Сообщения из спец. темы выглядит так- \n\t```json\n\t{\"hash\": \"хэш проверенного сообщения\", \n\t\"topic\": \"тема где это сообщение лежало\", \n\t\"partition\": \"партиция где сообщение находилось\"}\n\t```\n### В начале\n1) Забираем **все сообщения** из _спец. темы_, Ложим их в общий список.\n2) Проходимся по списку разделяя сообщения по партициям где они лежали.\n### Цикл\n1) Получаем _проверяемое_ сообщение.\n2) Перед проверкой обновляем списки.\n\t1) Получаем все новые сообщения из спец. темы.\n\t2) Разделяем их по вышеописанному принципу.\n3) Смотрим из какой партиции пришло  _проверяемое_ сообщение.\n4) Ищим хэш _проверяемого_ сообщения в соответствующим списке.\n5) **Если нашли:** Выкидываем это сообщение.\n\n\t**Не нашли:** Передаём сообщение на обработку.\n8) Добавляем новый хэш в соответствующий список.\n9) Отправляем сообщение в спец. тему.\n\n## Производитель\nЯ считаю что код довольно понятный :)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fteta42%2Fanti_duplicate_system","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fteta42%2Fanti_duplicate_system","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fteta42%2Fanti_duplicate_system/lists"}