To get all the (1000th) rows, using the primary key of the table:
SELECT du.user_id
, ua.* -- any other column you need
FROM
( SELECT DISTINCT user_id
FROM user_activity
) AS du
LEFT JOIN
user_activity AS ua
ON ua.pk = -- the PRIMARY KEY of the table
( SELECT ai.pk
FROM user_activity AS ai
WHERE ai.user_id = du.user_id
ORDER BY created_at
LIMIT 1 OFFSET 999
) ;
or using the (user_id, created_at) combination:
SELECT du.user_id
, ua.*
FROM
( SELECT DISTINCT user_id
FROM user_activity
) AS du
LEFT JOIN
user_activity AS ua
ON ua.user_id = du.user_id
AND ua.created_at =
( SELECT ai.created_at
FROM user_activity AS ai
WHERE ai.user_id = du.user_id
ORDER BY created_at
LIMIT 1 OFFSET 999
) ;
I guess the number of rows in the table per user is high, so an index on (user_id, created_at, pk) would be good for efficiency.