<!--#include virtual="includes/_header.htm" -->
<body class="page-contributing ">
<!--#include virtual="includes/_top.htm" -->
<div class="content">
	<!--#include virtual="includes/_nav.htm" -->
	<div class="right">
		<h1 class="content-title">How to contribute</h1>
		<p>We are always very happy to have contributions, whether for trivial cleanups or big new features.</p>
		<p>
		If you don't know Java or Scala you can still contribute to the project. An important area is the <a href="https://cwiki.apache.org/confluence/display/KAFKA/Clients">clients</a>. We want to have high quality, well documented clients for each programming language. These, as well as the surrounding <a href="https://cwiki.apache.org/confluence/display/KAFKA/Ecosystem">ecosystem</a> of integration tools that people use with Kafka&reg;, are critical aspects of the project.
		<p>
		Nor is code the only way to contribute to the project. We strongly value documentation and gladly accept improvements to the documentation.

		<h2>Reporting An Issue</h2>

		Reporting potential issues as <a href="https://issues.apache.org/jira/browse/KAFKA">JIRA tickets</a> is more than welcome as a significant contribution to the project. But please be aware that JIRA tickets should not be used for FAQs:
		if you have a question or are simply not sure if it is really an issue or not, please <a href="/contact.html">contact us</a> first before you create a new JIRA ticket.

		To create a new JIRA ticket, please follow the instructions in <a href="https://cwiki.apache.org/confluence/display/KAFKA/Reporting+Issues+in+Apache+Kafka">this page</a>.

		<h2>Contributing A Code Change</h2>

		To submit a change for inclusion, please do the following:

		<ul>
			<li>If the change is non-trivial please include some unit tests that cover the new functionality.</li>
			<li>If you are introducing a completely new feature or API it is a good idea to start a wiki and get consensus on the basic design first.</li>
			<li>Make sure you have observed the recommendations in the <a href="coding-guide.html">style guide</a>.</li>
			<li>Follow the detailed instructions in <a href="https://cwiki.apache.org/confluence/display/KAFKA/Contributing+Code+Changes">Contributing Code Changes</a>.</li>
			<li>Note that if the change is related to user-facing protocols / interface / configs, etc, you need to make the corresponding change on the documentation as well. For wiki page changes feel free to edit the page content directly (you may need to contact us to get the permission first if it is your first time to edit on wiki);  website docs live in the code repo under `docs` so that changes to that can be done in the same PR as changes to the code. Website doc change instructions are given below.
			<li>It is our job to follow up on patches in a timely fashion. <a href="mailto:dev@kafka.apache.org">Nag us</a> if we aren't doing our job (sometimes we drop things).</li>
		</ul>

		<h2>Contributing A Change To The Website</h2>

		To submit a change for inclusion please do the following:

		<ul>
		       <li>Follow the instructions in <a href="https://cwiki.apache.org/confluence/display/KAFKA/Contributing+Website+Documentation+Changes">Contributing Website Changes</a>.</li>
		       <li>It is our job to follow up on patches in a timely fashion. <a href="mailto:dev@kafka.apache.org">Nag us</a> if we aren't doing our job (sometimes we drop things). If the patch needs improvement, the reviewer will mark the jira back to "In Progress" after reviewing.</li>
		</ul>

		<h2>Finding A Project To Work On</h2>

		The easiest way to get started working with the code base is to pick up a really easy JIRA and work on that. This will help you get familiar with the code base, build system, review process, etc. We flag these kind of starter bugs <a href="https://issues.apache.org/jira/issues/?jql=project%20%3D%20KAFKA%20AND%20labels%20%3D%20newbie%20AND%20status%20%3D%20Open">here</a>.
		<p>
		Please request a JIRA account using <a href="https://selfserve.apache.org/jira-account.html">ASF's Self-serve portal</a>. After that you can assign yourself to the JIRA ticket you have started working on so others will notice.
		</p>
                <p>
                If your work is considered a "major change" then you would need to initiate a Kafka Improvement Proposal (KIP) along with the JIRA ticket (more details can be found <a href="https://cwiki.apache.org/confluence/display/KAFKA/Kafka+Improvement+Proposals">here</a>). Please ask us to grant you the permission on wiki space in order to create a KIP wiki page.
                </p>
		<p>
		Once you have gotten through the basic process of checking in code, you may want to move on to a more substantial project. We try to curate this kind of project as well, and you can find these <a href="https://issues.apache.org/jira/issues/?jql=project%20%3D%20KAFKA%20AND%20labels%20%3D%20project%20AND%20status%20%3D%20Open">here</a>.
		</p>

		<h2>Becoming a Committer</h2>

		We are always interested in adding new contributors. What we look for is a series of contributions, good taste, and an ongoing interest in the project.
		Kafka PMC looks at the following guidelines for promoting new committers:

		<ul>
			<li>Made significant contributions in areas such as design, code and/or documentation. The following are some examples (list not exclusive):
				<ul>
					<li>Submitted and completed non-trivial KIPs.</li>
					<li>Fixed critical bugs (including performance improvements).</li>
					<li>Made major tech-debt cleanup.</li>
					<li>Made major documentation (web docs and java docs) improvements.</li>
				</ul>
			</li>
			<li>Consistently helped the community in at least one of the following areas since more than 6 months back (list not exclusive):
				<ul>
					<li>Mailing list participation.</li>
					<li>Code reviews and KIP reviews.</li>
					<li>Release validations including testing and benchmarking, etc.</li>
					<li>Evangelism events: technical talks, blog posts, etc.</li>
				</ul>
			</li>
			<li>Demonstrated good understanding and exercised good technical judgement on at least one component of the codebase (e.g. core, clients, connect, streams, tests) from contribution activities in the above mentioned areas.</li>
		</ul>

		<h2>Collaborators</h2>

		<p>
		The Apache build infrastructure has provided two roles to make project management easier. These roles allow non-committers to perform some administrative actions like triaging pull requests or triggering builds. See the ASF documentation (note: you need to be logged in to the wiki):
		<ul>
			<li><a href="https://cwiki.apache.org/confluence/pages/viewpage.action?spaceKey=INFRA&title=Git+-+.asf.yaml+features#Git.asf.yamlfeatures-JenkinsPRwhitelisting">Jenkins PR Whitelisted Users</a></li>
			<li><a href="https://cwiki.apache.org/confluence/pages/viewpage.action?spaceKey=INFRA&title=Git+-+.asf.yaml+features#Git.asf.yamlfeatures-AssigningexternalcollaboratorswiththetriageroleonGitHub">Github Collaborators</a></li>
		</ul>
		</p>

		<p>
		In an effort to keep the Apache Kafka project running smoothly, and also to help contributors become committers, we have enabled these roles (See <a href="https://github.com/apache/kafka/blob/trunk/.asf.yaml">the Apache Kafka Infra config</a>). To keep this process lightweight and fair, we keep the list of contributors full by specifying the top N non-committers (sorted by number of commits they have authored in the last 12 months), where N is the maximum size of that list (currently 10). Authorship is determined by <code>git shortlog</code>. The list will be updated as part of the major/minor release process, three to four times a year.
		</p>

	<script>
	// Show selected style on nav item
	$(function() { $('.b-nav__project').addClass('selected'); });
	</script>

<!--#include virtual="includes/_footer.htm" -->
