forked from apache/kafka-site
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathblog.html
236 lines (223 loc) · 26.5 KB
/
blog.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<!--#include virtual="includes/_header.htm" -->
<body class="page-project ">
<!--#include virtual="includes/_top.htm" -->
<div class="content">
<!--#include virtual="includes/_nav.htm" -->
<div class="right">
<h1 class="content-title">Blog</h1>
<article>
<h2 class="bullet">
<a id="apache_kafka_360_release_announcement"></a>
<a href="#apache_kafka_360_release_announcement">Apache Kafka 3.6.0 Release Announcement</a>
</h2>
10 Oct 2023 - Satish Duggana (<a href="https://twitter.com/0xeed">@SatishDuggana</a>)
<p>We are proud to announce the release of Apache Kafka 3.6.0. This release contains many new features and improvements. This blog post will highlight some of the more prominent features. For a full list of changes, be sure to check the <a href="https://downloads.apache.org/kafka/3.6.0/RELEASE_NOTES.html">release notes</a>.</p>
<p>See the <a href="https://kafka.apache.org/36/documentation.html#upgrade_3_6_0">Upgrading to 3.6.0 from any version 0.8.x through 3.5.x</a> section in the documentation for the list of notable changes and detailed upgrade steps.</p>
<p>
The ability to migrate Kafka clusters from a ZooKeeper metadata system to a KRaft metadata system is
now ready for usage in production environments. See the ZooKeeper to KRaft migration
<a href="https://kafka.apache.org/documentation/#kraft_zk_migration">operations documentation</a> for
details. Note that support for JBOD is still not available for KRaft clusters, therefore clusters
utilizing JBOD can not be migrated. See <a href="https://cwiki.apache.org/confluence/display/KAFKA/KIP-858%3A+Handle+JBOD+broker+disk+failure+in+KRaft">KIP-858</a>
for details regarding KRaft and JBOD.
</p>
<p>Support for Delegation Tokens in KRaft (<a href="https://issues.apache.org/jira/browse/KAFKA-15219">KAFKA-15219</a>) was completed in 3.6, further reducing the gap of features between ZooKeeper-based Kafka clusters and KRaft. Migration of delegation tokens from ZooKeeper to KRaft is also included in 3.6.</p>
<p><a href="https://cwiki.apache.org/confluence/display/KAFKA/KIP-405%3A+Kafka+Tiered+Storage">Tiered Storage</a> is an early access feature. It is currently only suitable for testing in non production environments. See the <a href="https://cwiki.apache.org/confluence/display/KAFKA/Kafka+Tiered+Storage+Early+Access+Release+Notes">Early Access Release Notes</a> for more details.</p>
<p><i>Note: ZooKeeper is marked as deprecated since 3.5.0 release. ZooKeeper is planned to be removed in Apache Kafka 4.0. For more information, please see the documentation for <a href="/documentation#zk_depr">ZooKeeper Deprecation</a></i><p>
<h3>Kafka Broker, Controller, Producer, Consumer and Admin Client</h3>
<ul>
<li><b><a href="https://cwiki.apache.org/confluence/display/KAFKA/KIP-405%3A+Kafka+Tiered+Storage">KIP-405</a>:
Kafka Tiered Storage (Early Access): </b><br>Introduces Tiered Storage to Kafka. Note that this
is an early access feature only advised for use in non-production environments (see the <a
href="https://cwiki.apache.org/confluence/display/KAFKA/Kafka+Tiered+Storage+Early+Access+Release+Notes">early
access notes</a> for more information). This feature provides a separation of computation
and storage in the broker for pluggable storage tiering natively in Kafka Tiered Storage brings
a seamless extension of storage to remote objects with minimal operational changes.
</li>
<li><b><a href="https://cwiki.apache.org/confluence/display/KAFKA/KIP-405%3A+Kafka+Tiered+Storage">KIP-890</a>:
Transactions Server Side Defense (Part 1): </b><br>Hanging transactions can negatively impact
your read committed consumers and prevent compacted logs from being compacted. KIP-890 helps
address hanging transactions by verifying partition additions. Part 2 of KIP-890 will optimize
verification, which currently adds an extra hop.<br>
In 3.6.0, transaction verification will prevent hanging transactions on data partitions. In the next release, transactional offset commits will also be covered.
</li>
<li><b><a
href="https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=195726330">KIP-797</a>:
Accept duplicate listener on port for IPv4/IPv6: </b><br>Until now, Kafka has not supported
duplicate listeners on the same port. This works when using only a single IP stack, but presents
an issue if you are working with both IPv4 and IPv6. With KIP-797, brokers can be configured
with listeners that have the same port on different IP stacks. This update does not affect
advertised listeners, which already have this feature.
</li>
<li><b><a
href="https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=225152035">KIP-863</a>:
Reduce CompletedFetch#parseRecord() memory copy: </b><br>Reduces memory allocation and improves
memory performance during record deserialization by using a ByteBuffer instead of byte[] for
deserialization, which improves efficiency. Updated public interfaces include the Deserializer
class, ByteBufferDeserializer class, and StringDeserializer class.
</li>
<li><b><a href="https://cwiki.apache.org/confluence/display/KAFKA/KIP-868+Metadata+Transactions">KIP-868</a>:
Metadata Transactions: </b><br>Improves the overall durability of the KRaft layer by adding
metadata transactions that consist of:
<ul>
<li>BeginTransaction</li>
<li>Number of records</li>
<li>EndTransaction or AbortTransaction</li>
</ul>
KRaft uses record batches as a mechanism for atomicity. Typically, there was a limit to the
fetch size on the Raft consensus layer, and the controller could generate a set of atomic
records that exceeded this limit. This update introduces marker records that allow larger sets
of atomic records to be sent to the Raft consensus layer in multiple batches. This bypasses the
fetch limit.
</li>
<li><b><a href="https://cwiki.apache.org/confluence/display/KAFKA/KIP-902%3A+Upgrade+Zookeeper+to+3.8.2">KIP-902</a>:
Upgrade Zookeeper to 3.8.2:</b><br>This upgrades the ZooKeeper version that is bundled with Kafka to
version 3.8.2. The new version includes several updates and security improvements.
</li>
<li><b><a href="https://cwiki.apache.org/confluence/display/KAFKA/KIP-917%3A+Additional+custom+metadata+for+remote+log+segment">KIP-917</a>:
Additional custom metadata for remote log segment:</b><br> It introduces having an optional
custom metadata as part of remote log segment metadata. RemoteStorageManager returns the
optional custom metadata when copyLogSegmentData() is invoked. It will be passed along with
remote log segment metadata.
</li>
<li><b><a href="https://cwiki.apache.org/confluence/display/KAFKA/KIP-937%3A+Improve+Message+Timestamp+Validation">KIP-937</a>:
Improve Message Timestamp Validation: </b><br>It improves data integrity and prevents potential
pitfalls caused by inaccurate timestamp handling by adding more validation logic for message
timestamps. While past timestamps are a normal occurrence in Kafka, future timestamps might
represent an incorrectly formatted integer. KIP-937 rejects messages with future timestamps and
provides a descriptive exemption.
</li>
<li><b><a
href="https://cwiki.apache.org/confluence/display/KAFKA/KIP-938%3A+Add+more+metrics+for+measuring+KRaft+performance">KIP-938</a>:
Add more metrics for measuring KRaft performance: </b><br>Adds new controller, loader, and snapshot emitter KRaft performance metrics.
</li>
</ul>
<h3>Kafka Streams</h3>
<ul>
<li><b><a href="https://cwiki.apache.org/confluence/display/KAFKA/KIP-923%3A+Add+A+Grace+Period+to+Stream+Table+Join">KIP-923</a>: Add A Grace Period to Stream Table Join: </b><br>Adds a grace period to stream-table joins to improve table-side out-of-order data handling. The joined object has a new method called "withGracePeriod" that will cause the table side lookup to only happen after the grace period has passed.</li>
<li><b><a href="https://cwiki.apache.org/confluence/display/KAFKA/KIP-941%3A+Range+queries+to+accept+null+lower+and+upper+bounds">KIP-941</a>: Range queries to accept null lower and upper bounds:</b><br>Previously, RangeQuery did not support null to specify “no upper/lower bound”.
KIP-941 allows users to pass null into withRange(...) for lower/upper bounds to specify a full or half-open range:
<ul>
<li>`withRange(null, null)` == `withNoBounds()`</li>
<li>`withRange(lower, null)` == `withLowerBound(lower)`</li>
<li>`withRange(null, upper)` == `withUpperBound(upper)`</li>
</ul>
</li>
</ul>
<h3>Kafka Connect</h3>
<ul>
<li><b><a href="https://cwiki.apache.org/confluence/display/KAFKA/KIP-793%3A+Allow+sink+connectors+to+be+used+with+topic-mutating+SMTs">KIP-793</a>: Allow sink connectors to be used with topic-mutating SMTs: </b><br>Adds support for topic-mutating SMTs for async sink connectors. This is to address an incompatibility between sink connectors overriding the SinkTask::preCommit method and SMTs that mutate the topic field of a SinkRecord .</li>
<li><b><a href="https://cwiki.apache.org/confluence/display/KAFKA/KIP-875%3A+First-class+offsets+support+in+Kafka+Connect">KIP-875</a>: First-class offsets support in Kafka Connect: </b><br>Provides first-class admin support for offsets in Kafka Connect. KIP-875 Part 1 added endpoints to get offsets and a new STOPPED state for connectors. The alter offsets and reset offsets endpoints have now been added.
<table>
<tr>
<th>Action</th>
<th>Description</th>
</tr>
<tr>
<td>GET /connectors/{connector}/offsets</td>
<td>Retrieve the offsets for a connector; the connector must exist</td>
</tr>
<tr>
<td>PATCH /connectors/{connector}/offsets</td>
<td>Alter the offsets for a connector; the connector must exist, and must be in the STOPPED state
</td>
</tr>
<tr>
<td>DELETE /connectors/{connector}/offsets</td>
<td>Reset the offsets for a connector; the connector must exist, and must be in the STOPPED state
</td>
</tr>
<tr>
<td>PUT /connectors/{connector}/pause</td>
<td>Pause the connector; the connector must exist</td>
</tr>
</table>
</li>
<li><b><a href="https://cwiki.apache.org/confluence/display/KAFKA/KIP-898%3A+Modernize+Connect+plugin+discovery">KIP-898</a>: Modernize Connect plugin discovery: </b><br>With KIP-898, Connect workers can now read from ServiceLoader manifests and module info directly during startup for more efficient plugin class discovery. Note that this update allows connector developers to add service declarations to their plugins.</li>
</ul>
<h3>Summary</h3>
<p>Ready to get started with Apache Kafka 3.6.0? Check out all the details in the <a href="https://archive.apache.org/dist/kafka/3.6.0/RELEASE_NOTES.html">release notes</a> and <a href="https://kafka.apache.org/downloads">download</a> Apache Kafka 3.6.0.</p>
<p>This was a community effort, so thank you to everyone who contributed to this release, including all our users and our 139 contributors: <br>
A. Sophie Blee-Goldman, Aaron Ai, Abhijeet Kumar, aindriu-aiven, Akhilesh Chaganti, Alexandre Dupriez, Alexandre Garnier, Alok Thatikunta, Alyssa Huang, Aman Singh, Andras Katona, Andrew Schofield, Andrew Grant, Aneel Kumar, Anton Agestam, Artem Livshits, atu-sharm, bachmanity1, Bill Bejeck, Bo Gao, Bruno Cadonna, Calvin Liu, Chaitanya Mukka, Chase Thomas, Cheryl Simmons, Chia-Ping Tsai, Chris Egerton, Christo Lolov, Clay Johnson, Colin P. McCabe, Colt McNealy, d00791190, Damon Xie, Danica Fine, Daniel Scanteianu, Daniel Urban, David Arthur, David Jacot, David Mao, dengziming, Deqi Hu, Dimitar Dimitrov, Divij Vaidya, DL1231, Dániel Urbán, Erik van Oosten, ezio, Farooq Qaiser, Federico Valeri, flashmouse, Florin Akermann, Gabriel Oliveira, Gantigmaa Selenge, Gaurav Narula, GeunJae Jeon, Greg Harris, Guozhang Wang, Hailey Ni, Hao Li, Hector Geraldino, hudeqi, hzh0425, Iblis Lin, iit2009060, Ismael Juma, Ivan Yurchenko, James Shaw, Jason Gustafson, Jeff Kim, Jim Galasyn, John Roesler, Joobi S B, Jorge Esteban Quilcate Otoya, Josep Prat, Joseph (Ting-Chou) Lin, José Armando García Sancio, Jun Rao, Justine Olshan, Kamal Chandraprakash, Keith Wall, Kirk True, Lianet Magrans, LinShunKang, Liu Zeyu, lixy, Lucas Bradstreet, Lucas Brutschy, Lucent-Wong, Lucia Cerchie, Luke Chen, Manikumar Reddy, Manyanda Chitimbo, Maros Orsak, Matthew de Detrich, Matthias J. Sax, maulin-vasavada, Max Riedel, Mehari Beyene, Michal Cabak (@miccab), Mickael Maison, Milind Mantri, minjian.cai, mojh7, Nikolay, Okada Haruki, Omnia G H Ibrahim, Owen Leung, Philip Nee, prasanthV, Proven Provenzano, Purshotam Chauhan, Qichao Chu, Rajini Sivaram, Randall Hauch, Renaldo Baur Filho, Ritika Reddy, Rittika Adhikari, Rohan, Ron Dagostino, Sagar Rao, Said Boudjelda, Sambhav Jain, Satish Duggana, sciclon2, Shekhar Rajak, Sungyun Hur, Sushant Mahajan, Tanay Karmarkar, tison, Tom Bentley, vamossagar12, Victoria Xia, Vincent Jiang, vveicc, Walker Carlson, Yash Mayya, Yi-Sheng Lien, Ziming Deng, 蓝士钦
</p>
</article>
<article>
<h2 class="bullet">
<a id="apache_kafka_351_release_announcement"></a>
<a href="#apache_kafka_351_release_announcement">Apache Kafka 3.5.1 Release Announcement</a>
</h2>
21 July 2023 - Divij Vaidya (<a href="https://twitter.com/divijvaidya">@DivijVaidya</a>)
<p>We are proud to announce the release of Apache Kafka 3.5.1. This is a security patch release. It upgrades the dependency, snappy-java, to a version which is not vulnerable to <a href="https://nvd.nist.gov/vuln/detail/CVE-2023-34455">CVE-2023-34455</a>. You can find more information about the CVE at <a href="https://kafka.apache.org/cve-list#CVE-2023-3445">Kafka CVE list</a>. For a full list of changes, be sure to check the <a href="https://downloads.apache.org/kafka/3.5.1/RELEASE_NOTES.html">release notes</a>.</p>
<p>See the <a href="https://kafka.apache.org/35/documentation.html#upgrade_3_5_1">Upgrading to 3.5.1 from any version 0.8.x through 3.4.x</a> section in the documentation for the list of notable changes and detailed upgrade steps.</p>
<h3>Kafka Broker, Controller, Producer, Consumer and Admin Client</h3>
<ul>
<li>
Upgraded the dependency, snappy-java, to a version which is not vulnerable to
<a href="https://nvd.nist.gov/vuln/detail/CVE-2023-34455">CVE-2023-34455.</a>
You can find more information about the CVE at <a href="https://kafka.apache.org/cve-list#CVE-2023-34455">Kafka CVE list.</a>
</li>
<li>
Fixed a regression introduced in 3.3.0, which caused <code>security.protocol</code> configuration values to be restricted to
upper case only. After the fix, <code>security.protocol</code> values are case insensitive.
See <a href="https://issues.apache.org/jira/browse/KAFKA-15053">KAFKA-15053</a> for details.
</li>
</ul>
<h3>Summary</h3>
<p>This was a community effort, so thank you to everyone who contributed to this release, including all our users and our 22 authors. Please report an unintended omission.
<p>Alyssa Huang, Aman Singh, andymg3, Bo Gao, Calvin Liu, Chia-Ping Tsai, Chris Egerton, d00791190, Damon Xie, David Arthur, David Jacot, Divij Vaidya, DL1231, ezio, Manikumar Reddy, Manyanda Chitimbo, Mickael Maison, minjian.cai, Proven Provenzano, Sambhav Jain, vamossagar12, Yash Mayya</p>
</p>
</article>
<article>
<h2 class="bullet">
<a id="apache_kafka_350_release_announcement"></a>
<a href="#apache_kafka_350_release_announcement">Apache Kafka 3.5.0 Release Announcement</a>
</h2>
15 June 2023 - Mickael Maison (<a href="https://twitter.com/MickaelMaison">@MickaelMaison</a>)
<p>We are proud to announce the release of Apache Kafka 3.5.0. This release contains many new features and improvements. This blog post will highlight some of the more prominent features. For a full list of changes, be sure to check the <a href="https://downloads.apache.org/kafka/3.5.0/RELEASE_NOTES.html">release notes</a>.</p>
<p>See the <a href="https://kafka.apache.org/35/documentation.html#upgrade_3_5_0">Upgrading to 3.5.0 from any version 0.8.x through 3.4.x</a> section in the documentation for the list of notable changes and detailed upgrade steps.</p>
<p>The ability to migrate Kafka clusters from ZK to KRaft mode with no downtime is still an early access feature. It is currently only suitable for testing in non production environments. See <a href="https://cwiki.apache.org/confluence/display/KAFKA/KIP-866+ZooKeeper+to+KRaft+Migration">KIP-866</a> for more details.</p>
<p><it>Note: ZooKeeper is now marked deprecated in this release. ZooKeeper is planned to be removed in Apache Kafka 4.0. (Cf <a href="/documentation#zk_depr">ZooKeeper Deprecation</a>)</it><p>
<h3>Kafka Broker, Controller, Producer, Consumer and Admin Client</h3>
<ul>
<li><b>KIP-881: Rack-aware Partition Assignment for Kafka Consumers</b>: Kafka 3.4.0 only contained the protocol changes for <a href="https://cwiki.apache.org/confluence/display/KAFKA/KIP-881%3A+Rack-aware+Partition+Assignment+for+Kafka+Consumers">KIP-881</a>. The built-in assignors have now been updated to support rack-awareness.</li>
<li><b>KIP-887: Add ConfigProvider to make use of environment variables</b>: <a href="https://cwiki.apache.org/confluence/display/KAFKA/KIP-887%3A+Add+ConfigProvider+to+make+use+of+environment+variables">KIP-887</a> introduces a new <code><a href="https://kafka.apache.org/35/javadoc/org/apache/kafka/common/config/provider/ConfigProvider.html">ConfigProvider</a></code> implementation, <code>EnvVarConfigProvider</code>, to retrieve configurations from environment variables.</li>
<li><b>KIP-900: KRaft kafka-storage.sh API additions to support SCRAM for Kafka Brokers</b>: <a href="https://cwiki.apache.org/confluence/display/KAFKA/KIP-900%3A+KRaft+kafka-storage.sh+API+additions+to+support+SCRAM+for+Kafka+Brokers">KIP-900</a> updates the <code>kafka-storage</code> tool and adds a mechanism to configure SCRAM for inter broker authentication with KRaft.</li>
<li><b>KIP-903: Replicas with stale broker epoch should not be allowed to join the ISR:</b> <a href="https://cwiki.apache.org/confluence/display/KAFKA/KIP-903%3A+Replicas+with+stale+broker+epoch+should+not+be+allowed+to+join+the+ISR">KIP-903</a> addresses a limitation of the inter broker replication protocol which could lead to data loss in case of a broker failing while another broker had an unclean shutdown.</li>
</ul>
<h3>Kafka Streams</h3>
<ul>
<li><b>KIP-399: Extend ProductionExceptionHandler to cover serialization exceptions</b>: <a href="https://cwiki.apache.org/confluence/display/KAFKA/KIP-399%3A+Extend+ProductionExceptionHandler+to+cover+serialization+exceptions">KIP-399</a> adds a method, <code>handleSerializationException()</code>, to the <code>ProductionExceptionHandler</code> interface to handle any serialization errors encountered while producing records.</li>
<li><b>KIP-889: Versioned State Stores</b>: <a href="https://cwiki.apache.org/confluence/display/KAFKA/KIP-889%3A+Versioned+State+Stores">KIP-889</a> introduces versioned state stores to improve the accuracy of joins when out of order records are processed.</li>
<li><b>KIP-907: Add Boolean Serde to public interface</b>: Kafka Streams includes built-in Serdes for most primitive types. <a href="https://cwiki.apache.org/confluence/display/KAFKA/KIP-907%3A+Add+Boolean+Serde+to+public+interface">KIP-907</a> adds a new one for booleans.</li>
</ul>
<h3>Kafka Connect</h3>
<ul>
<li><b>KIP-710: Full support for distributed mode in dedicated MirrorMaker 2.0 clusters</b>: <a href="https://cwiki.apache.org/confluence/display/KAFKA/KIP-710%3A+Full+support+for+distributed+mode+in+dedicated+MirrorMaker+2.0+clusters">KIP-710</a> improves the dedicated mode of MirrorMaker. It now supports running multiple instances and handling automatic reconfigurations.</li>
<li><b>KIP-875: First-class offsets support in Kafka Connect</b>: <a href="https://cwiki.apache.org/confluence/display/KAFKA/KIP-875%3A+First-class+offsets+support+in+Kafka+Connect">KIP-875</a> adds REST API endpoints for managing offset of Connectors. 3.5.0 only contains endpoints for listing offsets. Endpoints for updating and deleting offsets will come in a future release.</li>
<li><b>KIP-894: Use incrementalAlterConfig for syncing topic configurations</b>: With <a href="https://cwiki.apache.org/confluence/display/KAFKA/KIP-894%3A+Use+incrementalAlterConfigs+API+for+syncing+topic+configurations">KIP-894</a>, MirrorMaker can use the <code>IncrementalAlterConfig</code> API when mirroring topic configuration between clusters.</li>
<li><b>KAFKA-14021: MirrorMaker 2 should implement KIP-618 APIs</b>: <a href="https://issues.apache.org/jira/browse/KAFKA-14021">KAFKA-14021</a> adds support for exactly-once semantics to MirrorSourceConnector.</li>
</ul>
<h3>Summary</h3>
<p>This was a community effort, so thank you to everyone who contributed to this release, including all our users and our 103 authors:
A. Sophie Blee-Goldman, Akhilesh Chaganti, Alex Sorokoumov, Alexandre Dupriez, Alyssa Huang, Anastasia Vela, Andreas Maechler, andymg3, Artem Livshits, atu-sharm, bachmanity1, Bill Bejeck, Brendan Ribera, Calvin Liu, Chaitanya Mukka, Cheryl Simmons, Chia-Ping Tsai, Chris Egerton, Christo Lolov, Colin P. McCabe, csolidum, Daniel Scanteianu, David Arthur, David Jacot, David Karlsson, David Mao, Dejan Stojadinović, Divij Vaidya, dorwi, drgnchan, Dániel Urbán, Edoardo Comar, egyedt, emilnkrastev, Eric Haag, Farooq Qaiser, Federico Valeri, Gantigmaa Selenge, Greg Harris, Guozhang Wang, Hao Li, Hector Geraldino, Himani Arora, Hoki Min, hudeqi, iamazy, Iblis Lin, Ismael Juma, Ivan Yurchenko, Jakub Scholz, Jason Gustafson, Jeff Kim, Jim Galasyn, Jorge Esteban Quilcate Otoya, Josep Prat, José Armando García Sancio, Juan José Ramos, Junyang Liu, Justine Olshan, Kamal Chandraprakash, Kirk True, Kowshik Prakasam, littlehorse-eng, liuzc9, Lucas Brutschy, Lucia Cerchie, Luke Chen, Manikumar Reddy, Manyanda Chitimbo, Matthew Wong, Matthias J. Sax, Matthias Seiler, Michael Marshall, Mickael Maison, nicolasguyomar, Nikolay, Paolo Patierno, Philip Nee, Pierangelo Di Pilato, Proven Provenzano, Purshotam Chauhan, Qing, Rajini Sivaram, RivenSun, Robert Young, Rohan, Roman Schmitz, Ron Dagostino, Ruslan Krivoshein, Satish Duggana, Shay Elkin, Shekhar Rajak, Simon Woodman, Spacrocket, stejani-cflt, Terry, Tom Bentley, vamossagar12, Victoria Xia, Viktor Somogyi-Vass, Vladimir Korenev, Yash Mayya, Zheng-Xian Li
</p>
</article>
<!--#include virtual="includes/_footer.htm" -->
<script>
// Show selected style on nav item
$(function() { $('.b-nav__project').addClass('selected'); });
</script>