{ "info": { "author": "real.digital", "author_email": "opensource@real-digital.de", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Topic :: Software Development :: Build Tools" ], "description": "# esque - an operational kafka tool.\n\n[![pypi Version](https://img.shields.io/pypi/v/esque.svg)](https://pypi.org/project/esque/) [![Python Versions](https://img.shields.io/pypi/pyversions/esque.svg)](https://pypi.org/project/esque/) [![Build Status](https://travis-ci.org/real-digital/esque.svg?branch=master)](https://travis-ci.org/real-digital/esque) [![Coverage Status](https://coveralls.io/repos/github/real-digital/esque/badge.svg?branch=add-coverage)](https://coveralls.io/github/real-digital/esque?branch=add-coverage) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\nIn the Kafka world nothing is easy, but `esque` (pronounced esk) is an attempt at it.\n\n## Why should you care?\n\nSome stuff is hard, and that is okay, listing your kafka topics shouldn't be.\n\nWhile adopting kafka at real.digital we noticed the immense entry barrier it poses to newcomers. \nWe can't recount how often we wrote Slack messages asking for the script to check the status of topics or consumergroups.\nThis is partly (but not only) due to a fragmented and unclear definition of tooling and APIs for kafka.\n\n`esque` tries to become a human-friendly point of first contact for your kafka cluster by exposing a `kubectl`-like interface to it.\n\n## Main Features\n\n* List Resources (Topics, Consumergroups, Brokers)\n* Get detailed Overviews of Resources (Topics, Consumergroups, Brokers)\n* Create/Delete Topics\n* Context Switch (Easily Switch between pre-defined Clusters)\n* Kafka Ping (Test roundtrip time to your kafka cluster)\n* and many more planned...\n\n## Installation and Usage\n\n### Installation\n\n`esque` is available at pypi.org and can be installed with `pip install esque`. `esque` requires Python 3.6+ to run.\n\n### Autocompletion\n\nAutocompletion is automatically installed via a post-install hook in the setup.py. \nIf it doesn't work for some reason you can still install it yourself: \n\n#### Bash\n\n```\n echo 'eval \"$(_ESQUE_COMPLETE=source esque)\"' >> ~/.esque/autocompletion.sh\n echo \"source ~/.esque/autocompletion.sh\" >> ~/.bashrc\n```\n\n#### ZSH\n\n```\necho 'eval \"$(_ESQUE_COMPLETE=source_zsh esque)\"' >> ~/.esque/autocompletion.zsh\necho \"source ~/.esque/autocompletion.zsh\" >> ~/.zshrc\n```\n\n### Usage\n\n#### Config Definition\n\nWhen starting `esque` for the first time the following message will appear:\n\n```\nNo config provided in ~/.esque\nShould a sample file be created in ~/.esque [y/N]:\n```\n\nWhen answering with `y` `esque` will copy over the [sample config](https://github.com/real-digital/esque/blob/master/sample_config.cfg) to `~/.esque/esque.cfg`.\nAfterwards you can modify that file to fit your cluster definitions.\n\nAlternatively might just provide a config file following the sample config's file in that path.\n\n\n### Command Overview\n\n```\n$ esque\nUsage: esque [OPTIONS] COMMAND [ARGS]...\n\n (Kafka-)esque.\n\nOptions:\n --help Show this message and exit.\n\nCommands:\n apply Apply a configuration\n create Create a new instance of a resource.\n ctx Switch clusters.\n delete Delete a resource.\n describe Get detailed informations about a resource.\n get Get a quick overview of different resources.\n ping Tests the connection to the kafka cluster.\n```\n\n#### Config file for \"apply\" command\n\nThe config for the apply command has to be a yaml file and\nis given with the option -f or --file.\n\nIn the current version only topic configurations can be\nchanged and specified.\n\nIt has to use the schema, which is used \nfor the following example:\n\n```\ntopics:\n - name: topic_one\n replication_factor: 3\n num_partitions: 50\n config:\n cleanup.policy: compact\n - name: topic_two\n replication_factor: 3\n num_partitions: 50\n config:\n cleanup.policy: compact\n```\n\n## Development\n\nTo setup your development environment, make sure you have at least Python 3.6 & [Pipenv](https://github.com/pypa/pipenv) installed, then run \n\n```\npipenv install --dev\npipenv shell \nexport PYTHONPATH=$(pwd)\n```\n\n### Run tests\n\nTo start up a local test setup (Kafka and Zookeeper), you can run\n\n```\ndocker-compose up\n```\nWhile this `docker-compose` stack is up, you can run the tests from the CLI via `pytest tests/ --integration --local`\n\n\nAlternatively, you can also run the entire test suite, without needing to setup the development environment, in docker compose via `docker-compose -f docker-compose.yml -f docker-compose.test.yml` \n\n\n## Alternatives\n\n- [LinkedIn KafkaTools](https://github.com/linkedin/kafka-tools)\n- [PyKafka Tools](https://github.com/Parsely/pykafka/blob/master/pykafka/cli/kafka_tools.py)\n- [Official Kafka Scripts](https://github.com/apache/kafka/tree/trunk/bin)\n- [kafkacat](https://github.com/edenhill/kafkacat)", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/real-digital/esque", "keywords": "kafka commandline apache", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "esque", "package_url": "https://pypi.org/project/esque/", "platform": "", "project_url": "https://pypi.org/project/esque/", "project_urls": { "Homepage": "https://github.com/real-digital/esque" }, "release_url": "https://pypi.org/project/esque/0.1.4a0/", "requires_dist": null, "requires_python": ">=3.6", "summary": "A usable kafka tool.", "version": "0.1.4a0" }, "last_serial": 5517698, "releases": { "0.1.2a0": [ { "comment_text": "", "digests": { "md5": "c9ceb48565fe34b81264ae24f0ed8183", "sha256": "da3ac83635d41872e3a3d191f2062a479c2cd9d7c1d3056c6da2d14c59443429" }, "downloads": -1, "filename": "esque-0.1.2a0.tar.gz", "has_sig": false, "md5_digest": "c9ceb48565fe34b81264ae24f0ed8183", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 14457, "upload_time": "2019-05-17T11:55:59", "url": "https://files.pythonhosted.org/packages/f5/35/af13fa70f8c0028b9c326daeb535d68312d440f97d38ace465e73cd2ab55/esque-0.1.2a0.tar.gz" } ], "0.1.3a0": [ { "comment_text": "", "digests": { "md5": "ead3981040f7ad479c33d2f726df102b", "sha256": "cb44cdd3eab5feac121d28f7c919c18502bd7d85917ef6867c49b13d856bc015" }, "downloads": -1, "filename": "esque-0.1.3a0.tar.gz", "has_sig": false, "md5_digest": "ead3981040f7ad479c33d2f726df102b", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 17429, "upload_time": "2019-06-03T12:02:17", "url": "https://files.pythonhosted.org/packages/1b/dd/7bdc5d612a509984b43943e72387c001199965ea4630169eaa98f3fa659d/esque-0.1.3a0.tar.gz" } ], "0.1.4a0": [ { "comment_text": "", "digests": { "md5": "62d90b8395e1be04d9d3b8c3a8e2bb9a", "sha256": "7fb3f814606650a94e50938b48d1ea0a92573c52b559d57f84b5fdeee0caaa48" }, "downloads": -1, "filename": "esque-0.1.4a0.tar.gz", "has_sig": false, "md5_digest": "62d90b8395e1be04d9d3b8c3a8e2bb9a", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 18487, "upload_time": "2019-07-11T13:31:18", "url": "https://files.pythonhosted.org/packages/c6/b2/d66a60bea2c1edd330e5f16e6cd7d03828485a3217b9398b1cac11af24a6/esque-0.1.4a0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "62d90b8395e1be04d9d3b8c3a8e2bb9a", "sha256": "7fb3f814606650a94e50938b48d1ea0a92573c52b559d57f84b5fdeee0caaa48" }, "downloads": -1, "filename": "esque-0.1.4a0.tar.gz", "has_sig": false, "md5_digest": "62d90b8395e1be04d9d3b8c3a8e2bb9a", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 18487, "upload_time": "2019-07-11T13:31:18", "url": "https://files.pythonhosted.org/packages/c6/b2/d66a60bea2c1edd330e5f16e6cd7d03828485a3217b9398b1cac11af24a6/esque-0.1.4a0.tar.gz" } ] }