According to what you said, your one write request consists of 500 events few kilobytes each. That means that each write request is about few megabytes. So if you have 15 req/s your write throughput is around few dozen megabytes per second, not that bad, actually. So, here are few questions and suggestions to make picture more clear:
Do you make simultaneous write requests or simultaneous. Especially in case of simultaneous requests, some of your requests can timeout as server is busy handling other requests. That will cause ClientAPI to automatically retry operation, reducing successful req/s number,
Could you try to send events with smaller batches, say 50 (or maybe even 20).
If you are running dev build, there are --prepare-timeout and --commit-timeout switches, which you could try to set to something bigger than default 2 second. Say, set 20000 ms for both commit and prepare.
Please, let us know if there is any positive effect.